백준 - 탑
문제 링크
https://www.acmicpc.net/problem/2493
문제 입출력
5
6 9 5 7 4
0 0 2 2 4
문제 풀이
package day220805.practice;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class BJ2493_탑 {
static int N; // 탑의 수
static Deque<int[]> stack = new ArrayDeque<>();
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception {
System.setIn(new FileInputStream("input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 1; i <= N; i++) {
// 탑의 층 입력 받기
int h = Integer.parseInt(st.nextToken());
// stack 이 빈다면 해당 층보다 큰게 없는 것
while (!stack.isEmpty()) {
// 만약 해당 탑의 층보다 큰게 있다면
if (stack.peek()[1] >= h) {
sb.append(stack.peek()[0] + " ");
break;
}
// 해당 탑의 층보다 크지 않다면
stack.pop();
}
// 제일 처음은 비교할 탑이 없다.
if (stack.isEmpty()) sb.append("0 ");
// 스택에 탑이 쌓인다.
// stack.add 를 하면 00222 가 나오는데 이 이유는
// add() 는 addLast() 이고 push() 는 addFirst() 이기 때문
// stack.add(new int[] { i, h });
stack.push(new int[] { i, h });
}
System.out.println(sb.toString());
} // end main
}
deque 클래스를 사용하더라고 stack 은 push(), pop() 을 이용해야한다는 점을 잊지말기.
deque 의 add 은 addLast() 이다.
stack 의 push 은 addFirst() 이다.
# 백준 탑 java # BJ2493 java
728x90
'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 백준 알고리즘' 카테고리의 다른 글
[BJ2606] 바이러스 (0) | 2022.09.04 |
---|---|
[BJ2628] 종이 자르기 (0) | 2022.08.09 |
[BJ2023] 신기한 소수 (0) | 2022.08.08 |
[BJ12891] DNA 비밀번호 (0) | 2022.08.08 |
[BJ21921] 블로그 (0) | 2022.08.08 |