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

 

2493번: 탑

첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1

www.acmicpc.net

 

현차 코테 문제 중에 있었던 유형 같다

  • stack에 [탑의 높이, index]를 2차원 배열 형태로 저장
  • 높이를 비교하면서 가장 높은 값이 stack에 남을 수 있도록 업데이트
  • 가장 가까이 위치한 탑이 출력되야 하므로 for문 돌릴 때마다 일단 stack에 append해줘야 함

 

import sys
r = sys.stdin.readline

n = int(r())
t_list = list(map(int, r().split()))
answer = []
stk = []

for i in range(n):
    h = t_list[i]
    while stk:
        if stk[-1][0] > h:
            answer.append(stk[-1][1]+1)
            break
        else:
            stk.pop()
    if not stk:
        answer.append(0)
    stk.append([h, i])

print(*answer)

+ Recent posts