[programmers]大数の作成
9984 ワード
私の解答(失敗)
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例
Reference
この問題について([programmers]大数の作成), 我々は、より多くの情報をここで見つけました https://velog.io/@rhdgoehe2/Programmers-큰-수-만들기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol