[programmers]大数の作成


私の解答(失敗)

function solution(number, k) {
    var answer = '';
    
    // 정답의 길이
    let answerLength = number.length - k;
    let numArr = number.split('');
    
    // "4177252841"의 "41772"중 가장 큰수를 고른다.(첫번째 수)
    let firstNum = Math.max(...numArr.slice(0,k)) 
    answer += firstNum;
    
    // 첫번째 숫자의 인덱스까지 배열을 잘라낸다."7252841"
    let firstIndex = numArr.indexOf(answer)
    
    numArr = numArr.splice(firstIndex+1)

    const recursion = (arr) => {

        let abc = '0';
        for (let i =0; i < arr.length; i++) {
            let num = arr[i]
            arr[i] =""
            if (abc < arr.join('')) {
                abc = arr.join('')
            }
            arr[i] = num;
        }

        if (abc.length === answerLength -1) {
            answer += abc;
            return
        };
        recursion(abc.split(''))
    }
    recursion(numArr)

    return answer;
}

他人を解く

function solution(number, k) {
    let stack = [];
    
    for (let i = 0; i < number.length; i++){
        while (k > 0 && stack[stack.length-1] < number[i]) {
            stack.pop()
            k--
        }
        stack.push(number[i])
    }
    // stack.splice(stack.length-k, k);
    // return stack.join('')
    return stack.slice(0, number.length-k).join('')
}
/*
문자열 number를 순회하면서

현재 요소가 배열 stack의 마지막 요소보다 크고 k가 0보다 크다면
{stack의 마지막 요소를 제거하고 
k를 1 감소 시킨다.}->이 과정을 계속 실행 

현재 요소가 stack의 마지막 요소보다 작다면
stack에 현재 요소를 추가한다.

for문이 종료되고
k 가 0 이상일 경우 ex) 9999(같은 숫자가 반복되는 경우 제거가 안되서 k가 0이 안됨)
k 만큼 stack의 뒤의 요소를 없애서 리턴해야 한다.
slice 를 이용할 수도 있고
splice를 이용할 수도 있다.
*/

問題の説明


ある数字からk個の数字を削除した場合
一番大きい数字がほしいです.
例えば、2つの数字が1924から削除されると、
[19,12,14,92,94,24]
このうち最大の数字は94です.
数値と
削除する数k
solution関数のパラメータとして使用します.
numberからk個数を削除する場合
作成できる最大数
完了ソリューション関数は文字列で返されます.

せいげんじょうけん


numberは1ビット以上で、
1000000桁未満の数字.
kは、1つまたは複数のビット数未満の自然数である.

I/O例