[백준] 6198: 옥상 정원 꾸미기 - JAVA
https://www.acmicpc.net/problem/6198
풀이
그리디스러운 문제였다. 알고리즘 분류는 자료 구조, 스택.
자기보다 오른쪽에 있는 빌딩을 보는데 높이가 자기보다 낮은 빌딩을 볼 수 있다.
중간에 같거나 높은 빌딩을 만나면 그 다음부터 빌딩은 보지 못한다.
나는 현재 빌딩의 높이를 기준으로 이 빌딩을 볼 수 있는 왼쪽 빌딩들의 개수를 카운트했다.
stack에 빌딩의 높이를 담으면서 진행하며 현재 빌딩보다 낮은 빌딩을 스택에서 빼줬다.
stack의 사이즈를 답에 더해주고 현재 빌딩을 stack에 넣어주면 끝.
메모리: 24236KB
시간: 324ms
언어: Java 11
코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Stack<Long> bldg = new Stack<>();
long ans = 0;
for(int i = 0; i < N; i++) {
long h = Long.parseLong(br.readLine());
while(!bldg.isEmpty() && bldg.peek() <= h) {
bldg.pop();
}
ans += bldg.size();
bldg.add(h);
}
System.out.println(ans);
}
}