[PS] 큰 수 만들기 (LV2)
프로그래머스 레벨2
큰 수 만들기
어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.
예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.
문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.
제한사항
- number는 2자리 이상, 1,000,000자리 이하인 숫자입니다.
- k는 1 이상 number의 자릿수 미만인 자연수입니다.
풀이
function solution(number, k) {
// 정답 배열
let answer = [];
// number만큼돈다
for (let i = 0; i < number.length; i++) {
/**
* 1. k(자를숫자)가 남아있다면
* 2. 정답배열의 마지막숫자가 현재 index숫자보다 작다면
* 3. 맨뒤의숫자 (pop)를 제거하고
* 4. 자를숫자 횟수를 감소시켜준다
*/
while (k > 0 && answer[answer.length - 1] < number[i]) {
answer.pop();
k -= 1;
}
// 만약 자를횟수가없고, 현재 number가 answer보다 작으면 정답배열에 추가
answer.push(number[i]);
}
// 최종적으로 나온 answer를 .join시켜서 반환한다
// "111111111"과 같은 상황이나오면
// k가 감소를 하지않으므로, k만큼 잘라서 반환시켜준다
return answer.join("").slice(0, answer.length - k);
}
마무리
탐욕법
처음에는 무작정 MAX값과 number[i]값을 비교해가면서 자른숫자가 k와 갯수가 맞으면 return 시켯는데 테스트케이스로 설정한 2개가 맞지 않았다
그리고 모든숫자가중복인 상황도 있을수있으니 해당상황은 return 시킬때 k 갯수만큼 slice시켜줫다
Author And Source
이 문제에 관하여([PS] 큰 수 만들기 (LV2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sjy0917/큰-수-만들기-LV2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)