[Programmers] 큰 수 만들기

sunriseGong·2021년 3월 14일
0

나의 풀이(실패)

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개의 수를 제거했을 때
얻을 수 있는 가장 큰 숫자를 구하려 합니다.

예를 들어, 숫자 1924에서 수 두 개를 제거하면
[19, 12, 14, 92, 94, 24] 를 만들 수 있습니다.
이 중 가장 큰 숫자는 94 입니다.

문자열 형식으로 숫자 number와
제거할 수의 개수 k가
solution 함수의 매개변수로 주어집니다.

number에서 k 개의 수를 제거했을 때
만들 수 있는 수 중 가장 큰 숫자를
문자열 형태로 return 하도록 solution 함수를 완성하세요.

제한 조건

number는 1자리 이상,
1,000,000자리 이하인 숫자입니다.
k는 1 이상 number의 자릿수 미만인 자연수입니다.


입출력 예

profile
심심해야 공부하게 된다.

0개의 댓글