꿈꾸는 개발자의 블로그
[백준] Python - 2493 탑 본문
문제 링크
https://www.acmicpc.net/problem/2493
문제 풀이
- 탑의 제일 오른쪽부터 순회하기 위해 stack에 제일 오른쪽 탑의 높이와 인덱스를 추가한다.
- 순회하면서 현재 탑의 높이보다 왼쪽 탑이 낮다면, stack에 현재 탑도 추가해준다. 그리고 다음 왼쪽 탑과 비교하기 위해 반복문을 나온다.
- 그렇지 않다면, stack에서 꺼낸 탑의 번호에 마주친 왼쪽 탑의 번호를 result에 추가한다. stack에 있는 요소 모두 왼쪽 탑과 비교 반복한다.
- 그렇게 검사를 다 하고 반복문을 나오면, 방금 비교했던 왼쪽 탑도 검사하기 위해 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
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] Python - 22942 데이터 체커 (0) | 2022.11.21 |
---|---|
[백준] Python - 2800 괄호 제거 (0) | 2022.11.19 |
[백준] Python - 10799 쇠막대기 (0) | 2022.11.18 |
[백준] Python - 1874 스택 수열 (0) | 2022.11.17 |
[백준] Python - 20437 문자열 게임 2 (0) | 2022.09.20 |
Comments