백준|2493번|탑

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
70/136

문제설명
서로 높이가 다른 탑들이 있고 탑들은 자신의 왼쪽편에 있는 탑들 중 자신보다 높이가 높은 탑과 통신한다. 만약 자신보다 높이가 높은 탑들이 여러개있으면 가장 가까운 탑과 통신을 한다. 이때 각 탑은 몇번째 탑과 통신을 하는지 출력하는 문제입니다.

작동 순서
1. 탑들의 개수 N을 입력받습니다.
2. 타워들의 높이를 입력받습니다.
3. 타워들의 개수만큼 반복문을 실행합니다.
4. 자신의 왼쪽에 있는 탑들중 가장 가까운 것부터 높이를 비교하며 자신보다 높이가 높거나 같은 탑이 있는지 확인합니다. 스택의 가장 위에 있는 탑의 높이와 비교하고 자신보다 낮은 경우 그 탑을 스택에서 제거합니다.
5. 자신보다 높이가 높거나 같은 탑이 있는 경우 그 탑의 번호를 출력합니다.
6. 자신보다 높이가 높거나 낮은 탑이 없는 경우 반복문을 종료하고 0을 출력합니다.
7. 스택에 자신의 높이와 자신의 번호를 입력하고 다음 탑으로 넘어갑니다.

소스코드

import sys
from collections import deque
heightStack = deque()
numberStack = deque()
N = int(sys.stdin.readline())
towerList = list(map(int, sys.stdin.readline().split()))
for i in range(N):
    while len(heightStack) > 0:
        if towerList[i] <= heightStack[-1]:
            print(numberStack[-1], end=" ")
            break
        else:
            heightStack.pop()
            numberStack.pop()
    if len(heightStack) == 0:
        print(0, end=" ")
    heightStack.append(towerList[i])
    numberStack.append(i+1)
profile
INTP 개발자 지망생

0개의 댓글