정수로 이루어진 배열 numbers가 있습니다. 배열 의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다. 정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요. 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.
창의력으로만 따지면 백준 골드급은 될 것 같은 문제. 이런 문제 및 활용 문제에 익숙해져야 스택과 큐를 제대로 다룬다고 볼 수 있겠다.
numbers를 탐색하며, 스택이 내림차순이 되도록 스택을 저장하는 게 포인트다. 구체적으로는...
어떤 index의 값에 대해, 만약 스택이 저장한 index의 값보다 크다면 index를 pop한다. pop한 index를 기준으로, 현재 등장한 idx는 처음으로 등장한 더 큰 수, 즉 뒷 큰수가 된다. 이 index를 정답 리스트에 기록하고, 위 조건에 위배될때까지 반복한다.
그리고 현재 index를 스택에 저장한다. 1, 2를 반복하면 스택은 자연스럽게 내림차순으로 쌓이며, 정답 리스트가 완성된다.
풀이 코드
from collections import deque
def solution(numbers):
length = len(numbers)
answer = [-1]*length
stk = deque([])
for i in range(length) :
value = numbers[i]
while stk and numbers[stk[-1]] < value :
answer[stk[-1]] = value
stk.pop()
stk.append(i)
return answer