https://www.acmicpc.net/problem/17608
문제
내 풀이
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
출처:
해석
'sw사관학교 정글 2기 > 02 이분탐색, 분할정복, 스택, 큐, 우선순위 큐' 카테고리의 다른 글
[큐] 백준 11866번 요세푸스 문제0 with Python3 (0) | 2021.08.13 |
---|---|
[큐] 백준 2164번 카드2 with Python3 (0) | 2021.08.13 |
[큐] 백준18258번 큐 2 with Python3 (0) | 2021.08.13 |
[스택] 백준 10773번 제로 with Python3 (0) | 2021.08.13 |
[스택] 백준 10828번 스택 with Python3 (0) | 2021.08.13 |
댓글