Algorithm

[프로그래머스/JavaScript] Lv.2 뒤에 있는 큰 수 찾기

cob 2023. 8. 2. 17:40

 

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

 

프로그래머스

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

programmers.co.kr

 

 


1. 문제 설명

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

 

 


2. 입출력

 

 


3.문제 풀이

비교 값을 담을 stack 생성 → numbers만큼 반복 → 최근 stack 값(가장 가까운 수)과 비교 → 큰수일 경우 push 아닐 경우 pop
function solution(numbers) {
    var answer = [];
    var stack = []; // 가장 가까이 있는 큰수를 찾기 위해 비교 스택 생성
 
    // 1) numbers 길이 만큼 반복, 뒤에서 부터 비교
    while (numbers.length) {
        
        // 2) stack에 담긴 값이 없다 = 현재 자신이 제일 크다
        if(!stack.length) {            
            answer.push(-1);
            
            // 3) 현재 자신의 숫자를 stack에 담고 numbers에서 제거한다.
            stack.push(numbers.pop());
        } else {
            // 4) stack에 담긴 값이 있을 경우, stack의 값과 비교하여 가장 가까이 있는 큰수 찾기
            if(stack[stack.length-1] > numbers[numbers.length-1]) {
                // 5) stack에서 큰수를 찾은 경우, answer에 해당 값을 담는다.
                answer.push(stack[stack.length-1]);                   
                
                // 6) 현재 자신의 숫자를 stack에 담고 numbers에서 제거한다.
                stack.push(numbers.pop());
            } else {
                /* 
                    7) 가장 가까이 있는 큰 수를 찾는 것이기 때문에 최근 저장한 stack의 값이 현재 자신보다
                     작다면 해당 stack 값은 버린다. 어차피 현재 값보다 작기 때문에 비교 대상에서 제외된다. 
                */
                stack.pop();
            }
        }
    }
 
    return answer.reverse();
}

 

 

 

반응형