728x90
🔗 Problem Link
https://www.acmicpc.net/problem/2493
❔Thinking
- 탑의 높이가 주어진 배열에서, 현 위치 왼쪽에 위치한 높은 탑의 가장 가까운 위치를 담아 반환한다.
- 동일한 높이의 탑도 포함하여 확인한다.
- 결국, 자신보다 높지 않은 탑은 비교 대상에서 제외된다.
💻Solution
import sys
input = sys.stdin.readline
N = int(input().rstrip())
buildings = list(map(int, input().split()))
laser = [0] * N
stack = [(0,0)] # (위치, 높이)
for idx, height in enumerate(buildings):
while stack and stack[-1][1] < height:
stack.pop()
if stack:
laser[idx] = stack[-1][0]+1
stack.append((idx, height))
print(' '.join(map(str,laser)))
🗝️keypoint
- 왼쪽으로 가면서 자신보다 높은 탑이 나오면 해당 위치를 담는다.
- 모든 탑에 대해 자신보다 높은 탑의 위치를 확인하기 때문에, 자신의 높이보다 탑은 stack에서 제거할 수 있다.
- 만약 [8, 1, 2, 3, 4, 5]로 탑이 주어진다면, 사실상 stack에는 (0, 8)만 계속 남아있게 된다.
- [8, 1, 2, 5, 4]로 탑이 주어진다면, 4의 경우 [(0,8), (3,5)]인 stack에서 5인 탑과 비교하게 된다.
'코딩테스트 > Python' 카테고리의 다른 글
[Baekjoon] 1202. 보석 도둑 (0) | 2025.01.28 |
---|---|
[Programmers] Level 2. 혼자서 하는 틱택토 (0) | 2025.01.24 |
[Programmers] Level 2. 요격 시스템 (0) | 2025.01.18 |
[Baekjoon] 1101. Fly me to the Alpha Centauri (0) | 2025.01.17 |
[Programmers] Level 2. 과제 진행하기 (0) | 2025.01.16 |