본문 바로가기
  • 초부득3 - 어제보다 나은 내일을 위해
  • 꿈이 현실이 되는 날까지
sw사관학교 정글 2기/02 이분탐색, 분할정복, 스택, 큐, 우선순위 큐

[스택] 백준 17608번 막대기 with Python3

by 금의야행 2021. 8. 13.

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

 

17608번: 막대기

아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로

www.acmicpc.net

문제

 

내 풀이

import sys
n = int(sys.stdin.readline())
stack = [] #막대기들을 순서대로 담을 스택/리스트

for _ in range(n):
    stack.append(int(sys.stdin.readline()))



rightstart = int(stack[-1]) #제일 앞에 바라보이는 막대기의 높이

top = int(max(stack)) #가장 긴 막대기. 이 뒤로는 보일 수가 없다.

count = 1 #첫번째 막대기는 이미 보이기에 1로 시작한다.


while rightstart != top: #찬찬히 하나씩 검증하면서 내려간다. 

    if len(stack) == 0 or rightstart == top:  #종료 조건
        break
        
    if int(stack[-1]) <= rightstart: #보이지 않는다면 제거해버린다.
        stack.pop()
        
    elif int(stack[-1]) > rightstart:  #만약 현재 막대기가 기준 막대기보다 크다면
    
        rightstart = int(stack[-1])  #기준을 바꾸고
        count += 1                   #개수를 올려주고 진행
        stack.pop()
        
print(count)

해설

바라보는 방향에서부터 막대기들을 pop하며 크기가 더 높을 경우 count를 올리고

 

기준점을 pop한 막대기로 바꾸고 진행.

 

가장 높은 막대기를 pop한 후 멈추게 되어있다.

 

 

정답 풀이

X

출처:

 

해석

 

댓글