Notice
Recent Posts
Recent Comments
Archives
반응형
«   2025/01   »
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 27 28 29 30 31
Today
Total
01-24 05:46
250x250
관리 메뉴

꿈꾸는 개발자의 블로그

[백준] Python - 2493 탑 본문

Algorithm/Baekjoon

[백준] Python - 2493 탑

aldrn29 2022. 11. 20. 16:25

문제 링크

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

 

2493번: 탑

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

www.acmicpc.net

 

문제 풀이

  1. 탑의 제일 오른쪽부터 순회하기 위해 stack에 제일 오른쪽 탑의 높이와 인덱스를 추가한다.
  2. 순회하면서 현재 탑의 높이보다 왼쪽 탑이 낮다면, stack에 현재 탑도 추가해준다. 그리고 다음 왼쪽 탑과 비교하기 위해 반복문을 나온다.
  3. 그렇지 않다면, stack에서 꺼낸 탑의 번호에 마주친 왼쪽 탑의 번호를 result에 추가한다. stack에 있는 요소 모두 왼쪽 탑과 비교 반복한다. 
  4. 그렇게 검사를 다 하고 반복문을 나오면, 방금 비교했던 왼쪽 탑도 검사하기 위해 stack에 추가하여 위를 반복한다.

 

전체 코드

num = int(input())
tops = list(map(int, input().split()))

stack = []
stack.append((tops[-1], num-1)) 
result = [0 for _ in range(num)]

for i in range(num-2, -1, -1) :
    while stack :  
        if stack[-1][0] <= tops[i] :
            result[stack.pop()[1]] = i+1 
        else :
            stack.append((tops[i], i))
            break
    stack.append((tops[i], i)) 

print(*result)

 

728x90
728x90
Comments