[백준] 2493 탑 자바(Java)
본문 바로가기
알고리즘 풀이/백준

[백준] 2493 탑 자바(Java)

by IYK2h 2023. 4. 10.
728x90

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

 

2493번: 탑

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

www.acmicpc.net

풀이

  • stack에 탑의 위치, 높이를 저장
  • 이전 탑의 길이) < 현재 탑의 길이
    • 이전 탑 pop()
  • 이전 탑의 길이) > 현재 탑의 길이
    • 이전 탑의 위치 표기
  • 수신할 수 있는 탑이 없으면
    • 0 표기

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        
        StringTokenizer st = new StringTokenizer(br.readLine());

        Stack<int[]> stack = new Stack<>();

        for (int n = 1; n <= N; n++) {
            // 현재 탑의 높이
            int current = Integer.parseInt(st.nextToken());

            while (!stack.empty()) {
                // 이전 탑의 높이가 현재 높이보다 작으면 필요 없으므로 pop
                if (stack.peek()[1] < current) {
                    stack.pop();
                }
                // 이전 탑의 높이가 현재 높이보다 크면 여기에 수신하므로 이전 탑의 높이 출력
                else {
                    System.out.print(stack.peek()[0] + " ");
                    break;
                }
            }

            // 스택이 비었다는 것은 수신할 탑이 없다는 뜻이므로 0 출력
            if (stack.isEmpty()) {
                System.out.print("0 ");
            }
            // 현재 탑(탑의 위치, 탑의 높이) push
            stack.push(new int[]{n, current});
        }
    }
}
728x90

댓글