ํ์์ ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ๋ ์ด์ ๋ฅผ ์์ ๋ ์์ ํ๊ฒ ๋๋ ํ์ ๋์ด๋ฅผ ์ฐพ๋ ๋ฌธ์ . ๋ ์ด์ ๋ฅผ ์ ํ์ ๋์ด๋ณด๋ค ๋์ ๋์ด๋ฅผ ๊ฐ๋ ํ๋ง ์์ ํ ์ ์๋ค.
ํ์ฌ ํ์ ์์น๋ณด๋ค ๋์ ์์น์ ํ ์์น๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค. ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ๋์ฉ ํ์ธํด๋๊ฐ๋ฉด ๋๋ค. ์ ์ฒด ํ์ ๊ฐ์๊ฐ 50๋ง์ด๊ธฐ ๋๋ฌธ์ ๊ฐ ํ์ ๋ํด์ ๋งค๋ฒ ์ผ์ชฝ์ ์ผ์ผ์ด ํ์ํ๋ฉด ์๊ฐ์ด๊ณผ๋จ.
๊ฒฐ๊ตญ ํ์ฌ ํ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ ์๋ ํ๋ค์ ๋ํ ์ ๋ณด๋ฅผ ์ด๋๊ฐ์ ์ ์ฅํด๋๊ณ ์ ์ฅ๋ ์ ๋ณด๋ฅผ ์ ์ฉํ๊ฒ ๊บผ๋ผ ์ ์๋ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ์ํ๋ค. ํ์ฌ ํ์ ์์น๋ณด๋ค ๋๊ธฐ๋งํ๋ฉด ๋๊ณ ์ผ๋ง๋ ๋ ๋์์ง๋ ์ค์ํ์ง ์๋ค. ์ผ์ชฝ์ ์์นํด ์์ผ๋ฉด์ ์ด์จ๋ ๋๊ธฐ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ํ์ฌ ํ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ผ๋ก ํ๋์ฉ ์ฐจ๋ก๋๋ก ๋ณผ ์ ์์ผ๋ฉด ๋๋ค.
์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ํ๋ฉด์(์ ์ฅ), ๊ฐ์ ๊บผ๋ด ํ์ธํ ๋๋ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ฐพ์์ผ ํ๋ ๋ฐฉ์์ LIFO์ธ ์คํ์ด ๊ฐ์ฅ ์ ํฉํ๋ค.
๋ชจ๋ ํ์ ๋ํด์ ์ฐ์ ์ ์ผ๋ก ์คํ์์ ์์ ๋ณด๋ค ๋์ ํ์ ์์น๋ฅผ ์ฐพ๋๋ค. ๊ฐ์ฅ ๊ฐ๊น์ด ์์(์ค๋ฅธ์ชฝ -> ์ผ์ชฝ)์ผ๋ก ํ์ํ๊ฒ ๋๋ฉฐ ์์ ๋ณด๋ค ๋ฎ์ ํ์ ์คํ์์ ์ ๊ฑฐํ๋ค. ๋ ๋์ ์์น์ ํ์ ์ฐพ๊ฒ ๋๋ฉด ํ์์ ์ค๋จํ๊ณ , ํ์ ์์น๋ฅผ ๊ธฐ๋กํ๋ค. ์ดํ ์์ ์ ๋์ด๋ฅผ ์ ์ฅํ๋ค. ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๊ฒ ๋๋ค.
์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ฒ ํ๊ธฐ ์ํด์ stack.isEmpty()
๋ฅผ ์ฐ๋ ๋์ ์ ์ ๋ ๊บผ๋ด์ง์ง ์์ ๊ฐ์ ๋ฏธ๋ฆฌ ์ ์ฅํ๋ค. ์ผ์ชฝ์ ๋ ๋์ ๋์ด์ ํ์ด ์๋ ๊ฒฝ์ฐ 0์ด ์ ์ฅ๋๋ค. ๊ฐ์ฅ ๋์ ๋์ด์ ํ์ด 1์ต์ด๊ธฐ ๋๋ฌธ์ 1์ต๋ณด๋ค ๋์ ๋์ด์ ํ์ ๋ฏธ๋ฆฌ tower
๋ฐฐ์ด์ ๊ฐ์ฅ ์์ ์ ์ฅํด๋๊ณ ์คํ์๋ ์ธ๋ฑ์ค 0๊ฐ์ ๋ฏธ๋ฆฌ ์ ์ฅํด์ ์คํ์ด ๋น์ด์์ง ์์ ์ ์๋๋ก ํ๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
private static final int MAX_HEIGHT = 100_000_001;
public static void main(String[] args) throws IOException {
// ์
๋ ฅ๊ฐ ๋ฐ๊ธฐ
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] tower = new int[n+1];
tower[0] = MAX_HEIGHT;
for (int i = 0; i < n; i++) {
tower[i+1] = Integer.parseInt(st.nextToken());
}
// ์คํ ์์ฑ
Stack<Integer> stack = new Stack<>();
stack.push(0);
// tower ๋ฐฐ์ด ๊ฐ ์คํ์ ์ ์ฅ
int[] answer = new int[n];
for (int i = 0; i < n; i++) {
int now_height = tower[i+1];
while(tower[stack.peek()] < now_height) {
stack.pop();
}
answer[i] = stack.peek();
stack.push(i+1);
}
// ์ถ๋ ฅ
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
sb.append(answer[i] + " ");
}
System.out.println(sb.toString());
}
}