본문 바로가기

코딩테스트/Python

[Python] 백준 #17298 - 오큰수

문제


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

 

 

풀이


import sys

n = int(input())
arr = list(map(int,sys.stdin.readline().strip().split()))

stack = [] # 오큰수를 구하지 못한 인덱스 스택
answer = [-1 for i in range(n)]

stack.append(0)
for i in range(1,n):
    while stack and arr[stack[-1]] < arr[i]: # 오큰수를 구하지 못한 수가 오큰수를 구할 때 동안
        answer[stack.pop()] = arr[i] # 답 넣기
    stack.append(i)
print(*answer)

오큰수를 구하지 못한 인덱스 스택을 만들어 주기 위하여 stack 리스트를 선언한다.

 

만약 오큰수를 구하지 못한 수가 오큰수를 구하면 스택에서 pop해주고 answer에 답을 넣어준다.