function solution(number, k) {
const arr = [];
const orgLen = number.length;
const resultLen = orgLen - k;
for (let i = 0; i < orgLen; ++i) {
const [curr, last, restLen] = [number[i], arr.at(-1), orgLen - i];
if (last && curr > last) {
while (
arr.length &&
arr.length + restLen > resultLen &&
arr.at(-1) < curr
)
arr.pop();
}
arr.push(curr);
}
return arr.join('').slice(0, resultLen);
}
코드가 좀 지저분하긴 한데 혼자 힘으로 해냈다!
스택을 사용해서 바로 앞의 수와 현재 수를 비교하고, 남은 요소의 수를 가지고 스택의 수들을 제거할지 여부를 결정한다.
"11" 1 "1"
나 "54321" 4 "5"
같이 뒤에서 더 큰 수가 등장하지 않는 경우 모든 수를 결과 배열에 담게 되므로 마지막에 slice()
로 잘라준다.