과정
- 비슷한 문제: 17298 오큰수
- 스택 사용하기
- 입력 받은 리스트를 처음부터 순서대로 스택에 추가
- 스택의 마지막에 있는 것보다 새로 들어올 값이 크면, 스택에서 큰 값이 나올 때까지 pop ( 스택의 길이는 1보다 크도록 유지 )
- 스택의 마지막에 있는 것보다 새로 들어올 값이 작으면, 스택의 마지막에 있는 값을 정답 리스트에 저장
- 맨 앞에 있는 값을 처리하기위해 입력 리스트의 맨 앞에 0을 추가해줬다.
import sys
N = int(input())
new_inp_lst = list(map(int, input().split()))
inp_lst = [0]
inp_lst.extend(new_inp_lst)
stack = [0]
ans_lst = [0] * (N+1)
for i in range(1, N+1):
while len(stack) > 1 and inp_lst[i] > inp_lst[stack[-1]]:
stack.pop()
ans_lst[i] = stack[-1]
stack.append(i)
print(*ans_lst[1:])
- 수신 탑이 존재하지 않으면 0을 출력해야한다. 따라서 정답 리스트를 0으로 초기화해준다. 정답이 업데이트되지 않으면 0 출력하도록.