Alogorithm
[Algorithm] 프로그래머스 - 큰 수 만들기 (그리디)
Daniel(빡일)
2022. 1. 5. 20:26
반응형
프로그래머스 문제입니다.
[문제설명]
어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.
예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.
문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.
[제한사항]
- number는 1자리 이상, 1,000,000자리 이하인 숫자입니다.
- k는 1 이상 number의 자릿수 미만인 자연수입니다.
[입출력]
[문제풀이]
function solution(number, k) {
/*
condition 1
1 digit <= number < 1000000 digit, is not float
*/
if (number.length < 1 || number.length > 1000000 || number%1 > 0 ) return false
/**
condition2
1 <= k <= number's digit, is not float
*/
if (k < 1 || k >= number.length || k%1 > 0 ) return false
let answer = []
let count = k
Loop1: for (let i = 0; i < number.length; i++) {
Loop2: while (answer.length !== 0 && count > 0) {
if (answer[answer.length - 1] < number[i]) {
answer.pop()
count--
} else break Loop2
}
answer.push(number[i])
}
return answer.join("").substr(0, number.length-k);
}
Idea:
- Stack을 사용한다.
- n번째 숫자는 n-1번째 숫자보다 커야한다.
-> 19 < 95
- 앞에서부터 순차적으로 k개만큼 제거한다.
- 같은 수로 조합된 경우를 고려하여, return전 length-k만큼 문자열을 잘라준다.
-> number 77777와 k=4
-> answer: 77777
반응형