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;
}