본문 바로가기

Algorithm/정보올림피아드

알고리즘 > 자료구조A > 빌딩(1328)

1. Question


문제 보기



2. Solving


쉬워보여 바로 코딩했다 마지막 Test case에서 Time limit이 걸려버렸다.

다양한 풀이법이 있을 수 있지만, Stack을 이용하니 O(n)의 속도가 되어 마지막 Test case도 통과할 수 있었다.

input으로 들어오는 빌딩의 높이가 3 2 6 1 1 2 라면,

1) 일단 첫번째 수를 Push

 

 

 

 

 3


2) top보다 작거나 같은 수가 나오면 push, 새로운 수가 top보다 큰 수가 나오면 top이 새로 들어올 수보다 클 때까지 pop하고 새로운 수를 push한다. 

2가 3보다 작기 때문에 push했다.

 

 

 

 2

 3


3) 6이 들어올 차례이다. 2가 6보다 작기 때문에 pop, 3도 pop, 그리고 6을 push한다.

 

 

 


6

               

4) 마찬가지 방법으로...push pop을 반복하면 아래와 같은 과정으로 스택이 변화한다.

6 1  -> 6 1 1 -> 6 2


5) 마지막까지 스택에 남아있는 6과 2의 자리는 0으로 출력하면 된다.



3. Code