[백준] 2075: 스카이라인 쉬운거 - JAVA

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

풀이

왼쪽부터 순서대로 좌표가 주어지므로 높이만 stack에 저장하면 된다.

스택에 높이를 저장하면서 stack.peek()보다 높이가 낮아지면

stack.peek()이 더 낮아질때까지 pop해주면서 답을 하나씩 늘린다.

그리고 새로운 높이를 스택에 저장한다.

주의할 점으로 높이가 0이면 저장을 안해도 되고, stack.peek()과 높이가 같으면 저장을 안해도 된다는 것이있다.


메모리: 19576KB

시간: 212ms

언어: Java 11

코드

import java.util.*;
import java.io.*;

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());

        Stack<Integer> stack = new Stack<>();

        int ans = 0;
        StringTokenizer st;
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());

            while (!stack.isEmpty() && stack.peek() > y) {
                stack.pop();
                ans++;
            }

            if (y != 0 && (stack.isEmpty() || stack.peek() != y)) {
                stack.push(y);
            }
        }

        while (!stack.isEmpty()) {
            stack.pop();
            ans++;
        }

        System.out.println(ans);
    }

}