https://www.acmicpc.net/problem/17298
스택 사용
import java.io.*;
import java.util.*;
public class Main {
static Stack<Integer> stack = new Stack<>();
static int[] arr;
static int N = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
arr = new int[N];
for(int i=0; i<N; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
for(int i=0; i<N; i++) {
while (!stack.isEmpty() && arr[stack.peek()] < arr[i]){
arr[stack.pop()] = arr[i];
}
stack.push(i);
}
while(!stack.isEmpty()){
arr[stack.pop()] = -1;
}
for(int num : arr){
bw.write(num+" ");
}
bw.flush();
bw.close();
}
}
어떻게 이런 생각을 하지 싶은 문제다. 답을 보고 외워서 풀었다.
참고 : st-lab님 블로그
'알고리즘 > 백준' 카테고리의 다른 글
백준 1935번 - 후위 표기식 2 (0) | 2022.03.13 |
---|---|
백준 17299번 - 오큰등수 (Java 8) (0) | 2022.03.13 |
백준 10799번 - 쇠막대 (Java 8) (0) | 2022.03.12 |
백준 17413번 - 단어 뒤집기 2(Java 8) (0) | 2022.03.11 |
백준 1406번 - 에디터 (Java 8) (0) | 2022.03.11 |
댓글