import java.io.*;
import java.util.*;
class Top {
int loc;
int len;
Top(int loc, int len) {
this.loc = loc;
this.len = len;
}
}
public class Main {
static BufferedReader br;
static StringTokenizer st;
static int n;
static int[] tops;
static Stack<Top> s = new Stack<>();
static StringBuilder ans = new StringBuilder();
public static void main(String[] args) throws IOException {
input();
solve();
System.out.println(ans.toString());
}
static void input() throws IOException {
br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
tops = new int[n];
st = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++) {
tops[i] = Integer.parseInt(st.nextToken());
}
}
static void solve() {
ans.append("0 ");
s.push(new Top(1, tops[0]));
for(int i = 1; i < n; i++) {
while(true) {
if(s.isEmpty()) {
ans.append("0 ");
s.push(new Top(i+1, tops[i]));
break;
}
if(tops[i] < s.peek().len) {
ans.append(s.peek().loc + " ");
s.push(new Top(i+1, tops[i]));
break;
}
else {
s.pop();
}
}
}
}
}
스택을 이용한 문제였다.
스택이 비어있다면 현재 위치의 탑보다 큰 탑이 없으므로 0을 출력한다.
그 외의 2가지 케이스로는 현재 위치의 탑이 peek한 탑의 높이보다 높거나 같은 경우 스택에서 pop한다.
반대로 현재 위치의 탑이 peek한 탑의 높이보다 작을 경우 peek한 탑의 위치를 출력하고 현재 위치의 탑을 push한다.
'Dev > PS' 카테고리의 다른 글
[SWEA] 백만 장자 프로젝트 1859 java (0) | 2022.05.27 |
---|---|
[백준] 1918 후위 표기식 java (0) | 2022.05.26 |
[백준] 2800 괄호 제거 java (0) | 2022.04.25 |
[백준] 14502 실험실 java (0) | 2022.04.25 |
[백준] 2632 피자 판매 java (0) | 2022.04.16 |