Algorithm

[BOJ] 6198. 옥상 정원 꾸미기

프로그래민 2020. 7. 24. 00:34
반응형

2493번 탑과 비슷한 스택을 사용하는 문제이다.

문제를 접근할때 현재 빌딩에서 몇개를 볼수있느냐가 아니라 현재 빌딩이 몇개의 빌딩에서 보여지냐 를 기준으로 접근하였다. 그래서 스택을 이용하여 순서대로 입력을 받았다. 그리고 입력을 받은 순간 만일 스택의 top에 있는 빌딩의 높이가 현재 들어온 빌딩보다 높다면 그순간의 스택사이즈를 answer에 추가해주었고, 만일 현재 들어온 빌딩이 더 크다면 스택의 top에 위치한 빌딩을 pop해주었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package study4;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.LinkedList;
 
public class Main_bj_6198_옥상정원꾸미기 {
    public static void main(String[] args) throws Exception{
        BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
        long answer= 0;
        Deque<Long> deque = new LinkedList<>();
 
        int n=Integer.parseInt(br.readLine());
 
        for(int i=0;i<n;i++) {
            long height= Long.parseLong(br.readLine());
 
            while(deque.size()!=0) {
                if(deque.getLast() <= height) {        //새로운 빌딩이 크다면
                    deque.removeLast();
                }else {                                //새로들어오는 빌딩이 앞의 빌딩에서 볼수있다면
                    answer+=deque.size();
                    break;
                }
            }
            
            deque.addLast(height);
        }
        System.out.println(answer);
 
    }
}
 
              

 

반응형

'Algorithm' 카테고리의 다른 글

[Programmers] 스킬트리  (0) 2020.07.30
[BOJ] 4889. 안정적인 문자열  (0) 2020.07.26
[BOJ] 10844. 쉬운 계단 수  (0) 2020.07.05
[BOJ] 1, 2, 3 더하기 5  (0) 2020.07.05
[BOJ] 11052. 카드 구매하기  (0) 2020.07.03