Algorithm Problems

[백준] [Python] 17298번 오큰수 - 스택

WakaraNai 2021. 5. 25. 01:20
728x90
반응형

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

 

17298번: 오큰수

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.

www.acmicpc.net

 

 

Python

import sys
n = int(sys.stdin.readline().rstrip())
arr = list(map(int, sys.stdin.readline().split()))

stack = []
ans = []
for i in range(n-1, -1, -1):
    if not stack:
        ans.append(-1)
    elif stack[-1] > arr[i]:
        ans.append(stack[-1])
    else:
        isEmpty = False
        while stack[-1] <= arr[i]:
            stack.pop()
            if not stack:
                isEmpty = True
                break
        ans.append(-1 if isEmpty else stack[-1])

    stack.append(arr[i])


for i in range(n-1, -1, -1):
    print(ans[i], end=" ")

 

추가 테스트 케이스

입력

8
1 2 3 4 3 3 4 1

 

출력

2 3 4 -1 4 4 -1 -1

 

 

풀이

728x90
반응형