Algorithm/BOJ
[백준] 17298번 - 오큰수 (파이썬)
_temp
2022. 3. 14. 22:47
# 오큰수
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int, input().split()))
result = [-1] * N
stack = []
for i in range(N):
while stack and arr[stack[-1]] < arr[i]:
result[stack.pop()] = arr[i]
stack.append(i)
print(*result)
자료구조(스택)
1. stack = [0]인 상태로 시작
2. 반복문은 시작
- 현재 인덱스(stack [-1])의 값보다 i의 값이 더 작으면 전부 pop (pop한 인덱스의 답 : 현재 값)
- 이후 스택에 i appepnd
3. result 출력
스택 내부를 항상 오름차순 상태인 것을 유지 시켜야 한다고 생각하면 쉽다