백준 2493 탑

김민영·2023년 1월 9일
0

알고리즘

목록 보기
41/125

과정

  • 비슷한 문제: 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 출력하도록.
profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글