2493번: 탑

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

www.acmicpc.net


A탑과 그의 수신탑B 사이에는 A보다 작은 탑이 없다는 것이 포인트이다.

이전 탑 arr[i-1]을 확인해서 크면 result에 넣어주고, 작다면 이전탑의 수신탑을 확인한다.

 

import sys
input = sys.stdin.readline

N = int(input())
arr = list(map(int, input().split()))
result = [0]*N

for i in range(1, N):
    target = i-1
    while target != -1:
        if arr[target] >= arr[i]:
            result[i] = target+1
            break
        else:
            target = result[target]-1

print(*result)

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기