본문 바로가기
알고리즘/자료구조

[백준][Python] 2493번 탑

by 임짠짠 2022. 2. 10.
반응형
 

2493번: 탑

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

www.acmicpc.net

 

코드

 

import sys
n = int(input())
tower = list(map(int,sys.stdin.readline().split()))
stack = []
ans = []

for i in range(n):
    while stack:
        if stack[-1][0] < tower[i]:
            stack.pop()
        else:
            break
           
    if stack:
        ans.append(stack[-1][1])
    else:
        ans.append(0)
    stack.append([tower[i],i+1])
for i in ans:
    print(i,end = " ")

 

설명

 

스택에 탑의 번호와 인덱스를 같이 추가해주었다.

탑 번호는 1부터 시작하기 때문에 스택에 인덱스 값을 넣어줄 때는 1씩 더해주어야 된다. 

만약 스택이 비어있지 않으면 while문을 통해 스택의 가장 마지막에 있는 탑 번호와 현재 탑 번호를 비교하여 현재 탑 번호가 더 크면 스택에 있는 것을 pop 해준다. 어차피 뒤에 있는 탑들의 신호는 탑 번호가 더 큰 현재 탑에서 수신하기 때문이다.

while문이 끝났을 때 스택이 비어있지 않으면 현재 탑의 신호를 수신할 수 있는 탑이 존재함을 의미한다. 따라서 그 탑의 인덱스 값인 stack[-1][1]을 ans 스택에 push 해준다. 

반응형

댓글