https://www.acmicpc.net/problem/2493
2493번: 탑
첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1
www.acmicpc.net
백준 - 탑 (2493번)
난이도 : Gold 5
알고리즘 : Stack (스택)
Time Complexity : O( N )
if __name__ == '__main__':
N = int(input())
stack = [(0, 100_000_001)]
rs = [0] * N
for i, h in enumerate(map(int, input().split())):
while stack[-1][1] < h:
stack.pop()
rs[i] = stack[-1][0]
stack.append((i+1, h))
print(*rs)
스택으로 해결 가능한 문제이다.
현재 탑 ( i ) 의 높이 ( h ) 를 스택에 넣기 전에,
스택 안에 존재하는 ( h ) 보다 작은 값들을 제거해준다.
모두 제거하고 난 뒤 가장 최근에 남은 탑이,
현재 탑에서 쏜 레이저를 수신하는 탑이다.
이를 rs[i] 에 기록해둔다.
이후 현재 탑의 인덱스와 높이 ( i+1, h ) 를 스택에 넣어준다.
'Algorithm' 카테고리의 다른 글
좋은 친구 (3078번) - 백준 (BOJ) (0) | 2023.06.14 |
---|---|
광물 캐기 (172927번) - 프로그래머스 (Programmers) (0) | 2023.06.11 |
추석 트래픽 (17676번) - 프로그래머스 (Programmers) (1) | 2023.06.09 |
파티 (1238번) - 백준 (BOJ) (0) | 2023.06.08 |
과제 진행하기 (176962번) - 프로그래머스 (Programmers) (0) | 2023.06.07 |