프로그래머스 큰 수 만들기 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;
}