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)
'개발 > 알고리즘' 카테고리의 다른 글
[백준 2252] 줄 세우기 (python) (0) | 2021.05.03 |
---|---|
[백준 1717] 집합의 표현 (python) (0) | 2021.05.03 |
[프로그래머스] 경주로 건설 (python) (0) | 2021.05.01 |
[프로그래머스] 보석 쇼핑 (python) (0) | 2021.04.30 |
[백준 5557] 1학년 (python) (0) | 2021.04.29 |
최근댓글