[백준] 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);
}
}