스택 문제인데
주어진 수열이 아닌 수열의 인덱스를 스택에 넣어야 하는 문제
import sys
N = int(sys.stdin.readline())
A = list(map(int, sys.stdin.readline().split())) # 수열 입력받기
result = [-1 for _ in range(N)] # 결과값 저장 (오큰수가 없으면 -1이므로 미리 -1로 설정해놓는다)
stack = [] # index를 저장할 스택
stack.append(0) # 첫번째 index 0을 저장한다
for i in range(1, N):
while stack and A[stack[-1]] < A[i]: # 스택이 비어있지 않고 오큰수가 있다면
result[stack[-1]] = A[i] # 결과값을 오큰수로 바꿔주고
stack.pop() # 스택에서 오큰수가 있는 수의 index를 pop
stack.append(i) # 그 다음 index를 push
for i in result: # 출력
print(i, end = " ")
'공부하자! > 알고리즘' 카테고리의 다른 글
백준 2606 파이썬 바이러스 (0) | 2021.05.14 |
---|---|
백준 1021 파이썬 회전하는 큐 (0) | 2021.05.14 |
백준 10250 ACM 호텔 (0) | 2021.03.12 |
백준 1009 파이썬 분산처리 (0) | 2021.03.11 |
백준 2609 파이썬 최대공약수와 최소공배수 (0) | 2021.03.11 |