

input()
#초기화
answer = '0'
ppl = list(map(int, input().split()))
stack = [ppl[0]]
for i in range(1, len(ppl)):
p = ppl[i]
cansee = 0 #볼 수 있는 신선의 수
while stack and stack[-1]<=p: #현재 봉우리보다 작은 봉우리들을 스택에서 제거
stack.pop()
cansee += 1 # 작은 봉우리들은 현재 봉우리의 신선을 볼 수 있으므로
cansee += len(stack) # 스택에 남은 봉우리 = 현재 봉우리보다 큰 봉우리들 = 현재 봉우리를 볼 수 있음
stack.append(p)
answer += ' '+str(cansee)
print(answer)
봉우리 ?
보자마자 이건 스택이다... 라고 생각했다
높이가 떨어졌을 때를 알아내기 / 높아지는 길이 찾기 / 줄어드는 기간 찾기 등등은 모두 스택으로 구현하는 건가봐
오늘의 알고리즘 풀이 끗
'Code IT > Algorithm' 카테고리의 다른 글
[프로그래머스] 둘만의 암호 (Python) - ascii_lowercase, ord, chr (0) | 2023.02.07 |
---|---|
[프로그래머스] 푸드 파이트 대회 (Python) (0) | 2023.02.06 |
[구름LEVEL] 단풍나무 (Python) (1) | 2023.02.04 |
[프로그래머스] 문자열 나누기 (Python) (0) | 2023.02.03 |
[프로그래머스] 가장 가까운 같은 글자 (Python) (0) | 2023.02.02 |
댓글