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

lee-goeun·2023년 6월 19일
0

문제출처
https://school.programmers.co.kr/learn/courses/30/lessons/154539

문제 설명

정수로 이루어진 배열 numbers가 있습니다. 배열 의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다.
정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요. 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.

제한사항

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

입출력 예

문제풀이

  1. numbers의 배열길이만큼 -1로 채운 값을 생성한다.
  2. numbers만큼 돌면서 stack에 데이터가 있고 stack 마지막 값을 index로 하는 number값과 현재 number값을 비교하여 현재 number값이 크면 stack 값을 빼서 해당 index값에 현재 number값을 넣어준다.
  3. 스택에 현재 위치에 들어갈 index번호를 넣어준다.
  4. 정답을 리턴한다.

다른 사람 코드

코드 출처 :
https://velog.io/@sean2337/Programmers-%EB%92%A4%EC%97%90-%EC%9E%88%EB%8A%94-%ED%81%B0-%EC%88%98-%EC%B0%BE%EA%B8%B0-JavaScript

function solution(numbers) {
    var answer = new Array(numbers.length).fill(-1);
    var stack = [];
    
    for(let i=0; i<numbers.length; i++){
        while(stack && numbers[stack.at(-1)]<numbers[i]){
           answer[stack.pop()] = numbers[i]; 
        }
        stack.push(i);
    }
    
    return answer;
}

스택에 대해 개념은 잘 알고 있다고 생각했는데 정작 문제에 적용해서 풀려고 하니 어떻게 접근해야 될 지 모르겠어서 다른 사람 코드를 보고 문제풀이를 리뷰했다. 문제를 푸는 구현 능력도 부족하다는 것을 느꼈다.

TIL

  • Array.at(-1) : 배열 뒤에서 첫번째 값 반환

0개의 댓글