프로그래머스 큰 수 만들기 JavaScript

2023년 2월 8일

프로그래머스 큰 수 만들기

문제 풀이

스택을 이용해 푼 문제
number[i] 를 스택에 넣기 전, 빈 스택이 아니면서 스택의 맨 위 값이 number[i] 보다 크고 k가 0보다 크면 해당 조건이 만족하는 동안 pop과 k-- 한다.

numer = "1231234" k = 3 인 경우
i = 0, k = 0, stack = [1]
i = 1, k = 1, stack = [2]
i = 2, k = 2, stack = [3]
i = 3, k = 2, stack = [3, 1]
i = 4, k = 3, stack = [3, 2]
i = 5, k = 3, stack = [3, 2, 3]
i = 6, k = 3, stack = [3, 2, 3, 4] 가 된다.

stack을 문자열로 반환하기 전에 남은 k가 0보다 큰 경우에 남은 k만큼 버린 뒤 join을 통해 문자열로 바꾼다. (numer = "4321" k = 1 인 경우 for 문 종료 시 stack=[4, 3, 2, 1], k = 1)

solution.js
function solution(number, k) {
    let answer = '';
    const stack = [];

    for (let i = 0; i < number.length; i++) {
        while (stack.length > 0 && stack[stack.length-1] < number[i] && k > 0) {
            k--;
            stack.pop();
        }
        stack.push(number[i]);
    }
    
    answer = k > 0 ? stack.splice(0, number.length - k).join("") : stack.join("");
    return answer;
}

댓글