코딩테스트/그리디

뒤에 있는 큰 수 찾기

수타. 2023. 9. 12. 21:32

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 요약:

배열이 주어졌을 때, 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 구하여라.

 

소요시간:

@

 

난이도:

난이도2

 

시도횟수:

@

 

다른사람코딩:

def solution(numbers):
    stack = []
    result = [-1] * len(numbers)
    for i in range(len(numbers)):
        while stack and numbers[stack[-1]] < numbers[i]:
            result[stack.pop()] = numbers[i]

        stack.append(i)

    return result

여러 시도들을 해보았지만 풀지 못했고, 다른 사람이 쓴 코드를 참고했습니다.

빈 배열을 선언 후, 만약 새로운 숫자가 기존에 숫자보다 작은 경우 커야 우리가 찾는 뒤에 있는 큰 수 이기 때문에, 계속 빈 배열에 append시켜줍니다. 하지만 만약 가장 최근에 저장한숫자보다 커진 경우 우리가 찾는 뒤에 있는 큰 수 이기 때문에, 배열을 pop시켜서 뒤에있는 큰수 보다 작은 숫자들은 전부 방금 찾은 수를 큰수라고 하고, 할 수 있을 만큼 한 뒤, 그 수 역시 배열에 다시 append시켜줍니다. 이렇게 끝까지 가면 결국 배열엔 자기 뒤로부턴 자신보다 큰수가 없는 수들의 모임이 되고(자연스럽게 내림차순임) 이 숫자들의 위치엔 할당을 따로 하지 않았기 떄문에, 처음에 선언한 -1이 들어가게 됩니다.