# 오큰수
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 출력
스택 내부를 항상 오름차순 상태인 것을 유지 시켜야 한다고 생각하면 쉽다
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 1774번 - 우주신과의 교감 (파이썬) (0) | 2022.03.15 |
---|---|
[백준] 17299번 - 오등큰수 (파이썬) (0) | 2022.03.14 |
[백준] 6497번 - 전력난 (파이썬) (0) | 2022.03.13 |
[백준] 19236번 - 청소년 상어 (파이썬) (0) | 2022.03.12 |
[백준] 10282번 - 해킹 (파이썬) (0) | 2022.03.11 |