본문 바로가기

PS/백준

[백준 2493번 ] 탑 (파이썬/python)

728x90

https://www.acmicpc.net/problem/2493

 

2493번: 탑

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

www.acmicpc.net

 

스택 자료구조를 이용해서 풀 수 있는 문제이다.

스택을 사용해서 필요없는 값들(작은 송신탑의 값들)을 pop( ) 해주면

효율적으로 필요한 길이의 송신탑만 탐색할 수 있다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import sys
 
input = sys.stdin.readline
 
= int(input())
arr = list(map(int, input().split()))
st = []
answer = ""
for i in range(n):
    while 1:
        # 스택에 값이 없으면 0출력, st에 append
        if not st:
            answer += "0 "
            st.append([arr[i], i + 1])
            break
 
        # 만약 st 맨 뒤의 값이 현재 arr[i] 값보다 작으면
        if arr[i] > st[-1][0]:
            st.pop()
            continue
        else:
            answer += str(st[-1][1]) + " "
            st.append([arr[i], i + 1])
            break
 
print(answer)
cs
728x90