[BJ12493] 탑

 

 백준 - 탑 

문제 링크

https://www.acmicpc.net/problem/2493

 

2493번: 탑

첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1

www.acmicpc.net

 

문제 입출력

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