728x90
반응형
https://www.acmicpc.net/problem/6549
유명한 스택으로 풀리는 문제입니다.
스택에 이전 값들을 저장해두면서, (현재 index - 이전 index) * 이전값이 가장 큰 값을 구하는 문제입니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
while(true) {
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
if(n == 0) {
break;
}
long[] arr = new long[n + 1];
for(int i = 0; i < n; i++) {
arr[i] = Long.parseLong(st.nextToken());
}
long answer = 0;
Stack<Node> stack = new Stack<>();
for(int i = 0; i <= n; i++) {
int idx = i;
while(!stack.isEmpty() && stack.peek().num >= arr[i]) {
idx = stack.peek().idx;
answer = Math.max(answer, (i - idx) * stack.pop().num);
}
stack.add(new Node(idx, arr[i]));
}
sb.append(answer).append("\n");
}
System.out.print(sb);
}
}
class Node {
int idx;
long num;
public Node(int idx, long num) {
this.idx = idx;
this.num = num;
}
}
728x90
반응형
'백준 > 5001 - 10000' 카테고리의 다른 글
[백준] 8416번 : Czy umiesz potęgować? (0) | 2024.11.18 |
---|---|
[백준] 9881번 : Ski Course Design (0) | 2024.11.16 |
[백준] 9250번 : 문자열 집합 판별 (0) | 2024.10.13 |
[백준] 9252번 : LCS2(JAVA) (0) | 2021.11.04 |
[백준] 9063번 : 대지(JAVA) (0) | 2021.10.27 |
댓글