알고리즘/BOJ
[BOJ] 2493. 탑
재담
2022. 3. 14. 01:33
문제 원본 : https://www.acmicpc.net/problem/2493
2493번: 탑
첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1
www.acmicpc.net
import java.io.*;
import java.util.StringTokenizer;
public class Main {
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());
int[] arr = new int[n];
int[] ans = new int[n];
int[] top = new int[n];
int[] topIdx = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; ++i) {
arr[i] = Integer.parseInt(st.nextToken());
}
int idx = -1;
for (int i = 0; i < n; ++i) {
while (idx > -1 && top[idx] < arr[i]) {
--idx;
}
if (idx == -1) {
ans[i] = 0;
} else {
ans[i] = topIdx[idx];
}
top[++idx] = arr[i];
topIdx[idx] = i + 1;
}
StringBuilder builder = new StringBuilder();
for (int i = 0; i < n; ++i) {
builder.append(ans[i]).append(" ");
}
bw.write(builder.toString());
bw.close();
br.close();
}
}
- 스택을 활용한 문제
- 오큰수 문제랑 똑같은데 방향만 바뀌고 탑의 높이가 아니라 번호를 출력해야 한다.
- Stack 클래스보다 배열을 활용하는 게 더 빠른 것 같다.