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

kiki·2024년 11월 26일
0

프로그래머스

목록 보기
79/79

링크

https://school.programmers.co.kr/learn/courses/30/lessons/154539

문제

리스트가 주어질 때, 각 원소의 뒤에 있는 원소 중 자신보다 크며, 가장 가까이 있는 수를 뒷 큰수라고 할 때, 각 원소별 뒷 큰수가 담긴 리스트를 반환
*뒷 큰수가 없을 경우 -1

코드

def solution(numbers):
    answer = [-1 for _ in range(len(numbers))]
    stack = [0]
    
    for i in range(1, len(numbers)):
        now = numbers[i]
        while stack:
            if numbers[stack[-1]]<now:
                answer[stack.pop()]=now
            else:
                break
        stack.append(i)
    return answer

사족

포인트를 바꿔라
나는 단순히 '특정 원소의 뒷 큰수를 구하자'에 초점을 뒀는데, 이 문제는 '내가 누군가의 뒷 큰수게 아니게' 로 봐야한다.

stack을 사용하라
이 문제에서 주목할 점은, a, b, c (순서대로) 값이 있을 때, b가 a보다 크지 않고 c가 b보다 크지 않을 때, c도 a보다 클 수 없다는 것이다.
그렇기 때문에 이 문제에서 스택을 사용할 수 있는 것이다.
머리로 떠올리자면 어렵지만,,, 한 번 봤으니까 외워라

반환할 리스트를 미리 정해두고 인덱스로 수정해라
그래야 스택에서 인덱스를 사용하면서 뒷 큰수를 구할 수 있다.

유사 문제

  • 주식가격
    • 거의 풀이가 동일하다. 이걸 풀어보면서 원리를 이해해도 좋을 것 같다.

0개의 댓글