본문 바로가기
Problem Solving

[백준 BOJ - 2493 / 파이썬] 탑

by Oh Seokjin 2022. 8. 28.

 

2493번: 탑 (acmicpc.net)

 

2493번: 탑

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

www.acmicpc.net

🔍 문제 분석

각 탑에서 보내는 신호를 어느 탑에서 수신하는지 알아내는 프로그램

 

❗ 해결 아이디어 

자신보다 큰 타워 중 가장 가까운 타워가 신호를 받게 되므로, 그 외 타워는 고려하지 않음

 

✔️ 최종 풀이

import sys

n = int(sys.stdin.readline())
tower = list(map(int, sys.stdin.readline().split()))
prev_tower = []
result = []

for i in range(n):
    while prev_tower: 
        if prev_tower[-1][1] > tower[i]: # 이전 타워가 나보다 크다면 
            result.append(prev_tower[-1][0]+1) # 그 타워의 index가 수신 타워
            break
        else:
            prev_tower.pop() # 나보다 작은 타워는 나에게 가려지므로 pop
    if not prev_tower: # 첫번째 타워는 수신할 타워가 없으므로 0
        result.append(0)

    prev_tower.append([i, tower[i]])

for elem in result:
    print(elem, end=" ")

댓글