[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시켜줫다

좋은 웹페이지 즐겨찾기