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=" ")
'Problem Solving' 카테고리의 다른 글
[백준 BOJ - 4358 / 파이썬] 생태학 (0) | 2022.09.04 |
---|---|
[백준 BOJ - 1918 / 파이썬] 후위 표기식 (0) | 2022.08.28 |
[백준 BOJ - 1620 / 파이썬] 나는야 포켓몬 마스터 이다솜 (0) | 2022.08.04 |
[백준 BOJ - 2504 / 파이썬] 괄호의 값 (0) | 2022.08.01 |
[백준 BOJ - 2346 / 파이썬] 풍선 터뜨리기 (0) | 2022.07.30 |
댓글