본문 바로가기
Algorithm/BOJ

[백준] 17298번 - 오큰수 (파이썬)

by _temp 2022. 3. 14.

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

# 오큰수
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 출력

 

스택 내부를 항상 오름차순 상태인 것을 유지 시켜야 한다고 생각하면 쉽다