프로그래머스 Lv.2: 큰 수 만들기

Steve·2021년 11월 13일
0

https://programmers.co.kr/learn/courses/30/lessons/42883

탐욕법(greedy) 문제인데, 접근법을 몰라서 풀이를 참고해서 풀었다.
핵심은 의외로 스택을 사용하는 것이다. (상상도 못함)

방법은 이렇다.
스택에 주어진 숫자를 앞에서부터 하나씩 집어넣는다.
만약에 스택 맨 위의 숫자가 넣으려는 숫자보다 작으면 스택에서 제거한다.
그런식으로 k번만큼 제거를 하고, k번 만큼 했다면 더이상 제거 없이 스택에 넣어서 스택에 들어간 순서대로 문자열을 만들어 리턴하면 된다.

만약에 큰 숫자가 앞에 있고 뒤의 숫자들이 작아서 k 번만큼 제거가 안되었다면, 스택에 모든 문자열을 넣고 난 뒤 단순히 k번이 될 때까지 스택을 pop 시키면 된다.

function solution(number, k) {
    if (number.length <= k) return '';
    let answer = '';
    let stack = [];
    
    for (let x of number){
        if (stack.length && k){
            while (stack.length && k) {
                if (stack[stack.length - 1] < x) {
                    stack.pop();
                    k--;
                }
                else break;
            }
        }
        stack.push(x);
    }
    // number = 1000, k = 1 일경우
    while (k > 0) {
        k--;
        stack.pop();
    }
    
    answer = stack.join('');
    return answer;
}
profile
게임과 프론트엔드에 관심이 많습니다.

0개의 댓글