[탐욕법]큰 수 만들기

Siwoo Pak·2021년 7월 26일
0

자료구조&알고리즘

목록 보기
32/38

1.문제 설명

  • 어떤 숫자에서 k개의 수를 제거 햇을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.
    예를 들어, 숫자 1924에서 수 2개를 제거하면 [19,1,2,14,92,94,24]를 만들 수 있습니다. 이중 가장 큰 숫자는 94입니다.
    문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다.
    number에서 k개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return하도록 solution 함수를 완성하세요.

2.제한조건

  • number는 1자리 이상, 1,000,000이하인 숫자입니다.
  • k는 1이상 number의 자릿수 미만인 자연수입니다.
    number k return
    "1924" 2 "94"
    "1231234" 3 "3234"
    "4177252841" 4 "775841"

3.문제풀이

  • 매개변수로 문자열과 숫자형 데이터가 들어옴
  • 매개변수로 들어온 숫자만큼 숫자 제거
  • 가장 큰수를 만든다
  • 만약 매개변수로 "1924",2가 들어온다면
  • 가장 큰숫자는 9가 되고 그게 리턴할 배열의 0번째 인덱스
  • 2는 1감소하고
  • 그다음 최댓값은 4가 되면 배열엔 [9,4]가 되며 문자열로 리턴

4.코드

function solution(number, k) {
  // 숫자를 담을 배열
  let s = [];
  // 문자의 수만큼 반복
  [...number].forEach((num) => {
    // k가 0보다 크고, 현재 문자가 배열의 요소보다 작을 경우
    while (k > 0 && s[s.length - 1] < num) {
      // 배열에서 제거 되고
      s.pop();
      // k 1감소
      k--;
    }
    // 배열의 숫자 push
    s.push(num);
  });
  s.splice(s.length - k, k);
  
  return s.join("");
}
profile
'하루를 참고 인내하면 열흘을 벌 수 있고 사흘을 참고 견디면 30일을, 30일을 견디면 3년을 벌 수 있다.'

0개의 댓글