알고리즘

[프로그래머스, 파이썬] 뒤에 있는 큰 수 찾기

hminor 2024. 3. 5. 12:32

풀이

  • 처음에는 두 번째 풀이처럼 접근을 했지만 2개의 시간초과로 인해 해결하지 못했다.
  • 이유는 범위를 최대한 좁히려고 했지만
  • 범위가 너무 넓은 배열을 2중 for문이기에 좁혀도 무리가 있었던것 같다.
  • 그래서 첫 번째 풀이처럼 deque를 활용해서 
  • 우선 q가 있는지 그리고 q의 첫 번째 값의 숫자가 지금 조회하는 num보다 큰지 확인하여
  • 그렇다면 q의 첫 번째 인덱스에 해당하는 result에 현재의 num을 적용하며 해결

 

from collections import deque

def solution(numbers):
    result = [-1]*len(numbers)
    q = deque([(numbers[0],0)])
    for i,n in enumerate(numbers[1:]):
        while q and q[0][0]<n:
            _,idx = q.popleft()
            result[idx] = n
        q.appendleft((n,i+1))
    return result