[백준 2493] 탑

Junyoung Park·2022년 3월 6일
0

코딩테스트

목록 보기
195/631
post-thumbnail

1. 문제 설명

2. 문제 분석

스택을 통해 자신보다 높은 탑이 왼쪽에 있는지 확인해간다. 스택 확인이 끝난 뒤에는 자신이 오른쪽 탑들 기준에서는 새로운 스택의 top이 된다는 데 주의.

3. 나의 풀이

import sys

n = int(sys.stdin.readline().rstrip())
towers = list(map(int, sys.stdin.readline().rstrip().split()))
stack = []
result = []
for idx, tower in enumerate(towers, start=1):
    if not stack:
        stack.append([tower, idx])
        result.append(0)
        # 왼쪽에 탑이 없을 때
    else:
        while stack and stack[-1][0] < tower:
            stack.pop()
            # 왼쪽에 탑이 존재한다면 자신보다 높은 탑이 나올 때까지 찾는다.
        if not stack:
            stack.append([tower, idx])
            result.append(0)
            # 없다면 0 push
        else:
            result.append(stack[-1][1])
            stack.append([tower, idx])
            # 있다면 그 탑의 인덱스를 찾고 이 탑이 새로운 스택의 top이 된다.
print(*result, sep=' ')
profile
JUST DO IT

0개의 댓글