[python] 백준 17298번

hyeo71·2023년 5월 25일
0

백준

목록 보기
9/24

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


문제


소스코드

import sys
from collections import deque

a = int(sys.stdin.readline())
array = list(map(int, sys.stdin.readline().split()))

result = [-1] * a
stack = deque()

for i in range(a):
    while stack and (array[stack[-1]] < array[i]):
        result[stack.pop()] = array[i]
    stack.append(i)

print(*result)

풀이

마지막 인덱스의 값은 -1 고정이기 때문에 result의 값을 -1로 통일시킨다.
스택은 원소의 값이 아닌 원소의 인덱스를 저장하는 목적으로 사용한다.

현재 원소의 값이 이전 원소의 값보다 크다면 다음을 반복한다.

  • 스택에서 값 제거(pop)
  • 결과값[이전 원소의 인덱스]에 현재 원소의 값 저장

print(*list)를 사용하면 공백으로 구분하여 원소의 값만 출력할 수 있다.

예제 입력 : [9, 7, 6, 5, 4, 3, 2, 8, 10, 1]
예제 출력 : [10, 8, 8, 8, 8, 8, 8, 10, -1, -1]
사이트의 예제와 위 예제를 함께 고려하면 좋을 듯 하다.

0개의 댓글