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

2023. 2. 14. 13:53·PS/프로그래머스
반응형

코딩테스트 연습 - 뒤에 있는 큰 수 찾기

문제 설명

def solution(numbers: list) -> list:
        ...

정수로 이루어진 배열 numbers가 주어진다. 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 한다. numbers에서 각 원소의 뒷 큰수를 담은 배열을 구하는 문제이다. 만약 뒷 큰수가 존재하지 않으면 -1을 넣는다.

제한사항

  • 4 ≤ numbers의 길이 ≤ 1,000,000
    • 1 ≤ numbers[i] ≤ 1,000,000

풀이

복잡하게 풀려고 시도했지만 생각보다 간단한 방법으로 해결할 수 있었다. 접근 방법은 numbers 배열을 순회하며 숫자를 스택에 저장하고 스택에 담긴 숫자들의 뒷 큰수를 갱신하는 식으로 해결했다.

첫 번째 입력예제인 [2, 3, 4, 5] 를 예시로 풀어보면 아래와 같다.

먼저 뒷 큰수를 저장할 answer 배열을 numbers 배열과 동일한 크기로 만들고 -1로 초기화한다.

https://i.imgur.com/6Wk29r6.png

그리고 numbers 의 인덱스 0부터 순회하며 아래 조건들을 확인하고 스택에 저장한다.

  • 현재 인덱스가 가리키고 있는 numbers[i] 의 값과 스택에 저장된 값들을 비교한다.
  • 현재의 값이 더 클 경우 이 값이 스택에 저장되있던 값의 뒷 큰수가 된다.

인덱스 순회 과정을 그림으로 나타냈다.

https://i.imgur.com/SoDXFDR.png

  • index 0 : 스택에 현재 인덱스를 추가한다

https://i.imgur.com/n12XWXE.png

  • index 1
    • numbers[i]가 스택에 있는 값보다 크기 때문에 스택에 저장된 인덱스의 뒷 큰수가 된다. 따라서 answer 배열을 업데이트한다.
    • 현재 인덱스를 스택에 추가한다.

https://i.imgur.com/tBjJ1s4.png

  • index 2 : 스택에 현재 인덱스를 추가한다

https://i.imgur.com/S9jTJKZ.png

)

https://i.imgur.com/lutAGXn.png

  • index 3
    • numbers[i]가 스택의 top보다 크기 때문에 스택에 저장된 인덱스의 뒷 큰수가 된다. 따라서 answer 배열을 업데이트한다.
    • 스택에 남아있던 값이 동일하게 answer 배열을 업데이트한다.
    • 스택에 현재 인덱스를 추가한다.

순회가 끝나면 answer 배열에 뒷 큰수가 갱신되어 있다.

제출 코드

def solution(numbers: list) -> list:
    answer = [-1 for _ in range(len(numbers))]

    s = []
    for i, n in enumerate(numbers):

        while s and numbers[s[-1]] < n:
            answer[s[-1]] = n
            s.pop()

        s.append(i)

    return answer
반응형
저작자표시 비영리 변경금지
'PS/프로그래머스' 카테고리의 다른 글
  • [프로그래머스] 인사고과
  • [프로그래머스] 시소 짝궁
  • [프로그래머스] 크기가 작은 부분 문자열
  • [프로그래머스] 숫자 변환하기
덴마크초코우유
덴마크초코우유
IT, 알고리즘, 프로그래밍 언어, 자료구조 등 정리
    반응형
  • 덴마크초코우유
    이것저것끄적
    덴마크초코우유
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • Spring Framework (2)
        • Spring (2)
        • JPA (2)
        • Spring Security (0)
      • Language (50)
        • Java (10)
        • Python (10)
        • JavaScript (5)
        • NUXT (2)
        • C C++ (15)
        • PHP (8)
      • DB (16)
        • MySQL (10)
        • Reids (3)
        • Memcached (2)
      • 개발 (1)
      • 프로젝트 (1)
      • Book (1)
      • PS (15)
        • 기타 (2)
        • 백준 (2)
        • 프로그래머스 (10)
      • 딥러닝 (8)
        • CUDA (0)
        • Pytorch (0)
        • 모델 (0)
        • 컴퓨터 비전 (4)
        • OpenCV (1)
      • 기타 (16)
        • 디자인패턴 (2)
        • UnrealEngine (8)
        • ubuntu (1)
        • node.js (1)
        • 블로그 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JS
    딥러닝
    mscoco
    NUXT
    클래스
    redis
    언리얼엔진4
    Unreal Engine
    알고리즘
    블루프린트
    pytorch
    CPP
    map
    게임
    PS
    자바
    프로그래머스
    C++
    select
    C
    memcached
    Unreal
    FPS
    JavaScript
    웹
    php
    MySQL
    파이썬
    Python
    게임 개발
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
덴마크초코우유
[프로그래머스] 뒤에 있는 큰 수 찾기
상단으로

티스토리툴바