프로그래머스 lv2 문제 풀이 : 큰 수 만들기

전영호·2021년 8월 19일
0

알고리즘

목록 보기
29/40

프로그래머스 lv2 문제 풀이 : 큰 수 만들기

문제 설명

어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.

예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.

문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.

제한 조건

  • number는 1자리 이상, 1,000,000자리 이하인 숫자입니다.
  • k는 1 이상 number의 자릿수 미만인 자연수입니다.

입출력 예

numberkreturn
"1924"2"94"
"1231234"3"3234"
"4177252841"4"775841"

내 풀이

function solution(number, k) {
  let result = "";
  // 첫번째에는 0번부터 실행해주기 위함이고 이후 부터는
  // 가장 큰 수 다음부터 진행하기 위해서 인덱스 설정
  let index = -1;

  // 원하는 길이만큼 제거하고 반복
  for (let i = number.length - k; i > 0; i--) {
    // 가장 큰 수를 임시 저장할 변수
    let max = 0;
    // index는 처음 이후부터 가장 큰 수의 위치를 지정하기 때문에
    // 그 다음 인덱스 부터 필요 길이만큼만 반복(단계별로 맨 뒤까지 검사한다)
    for (let j = index + 1; j <= number.length - i; j++) {
      // 숫자중에서 9가 가장 크기 때문에 9라면 반복하지않고 저장후 break
      if (number[j] == "9") {
        max = 9;
        index = j;
        break;
        // max가 number[j]보다 작다면 더 큰 값을 저장해야하므로
        // max에 number[j] 저장하고 인덱스를 j로 바꾸어준다.
      } else if (max < number[j]) {
        max = number[j];
        index = j;
      }
    }
    // 최종 출력에 max를 이어 붙여준다
    result = result + String(max);
  }

  // 최종 출력
  return result;
}
profile
인생 1회차 주니어 개발자

0개의 댓글