큰 수 만들기

[문제 Link] https://programmers.co.kr/learn/courses/30/lessons/42883

문제 설명


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

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

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


제한사항


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


입출력 예


number k return
“1924” 2 “94”
“1231234” 3 “3234”
“4177252841” 4 “775841”


입출력 예 설명



로직


  1. 주어진 수는 7자리, 삭제하는 수는 3개일 경우 최대크기의 수는 4자리로 생성된다.

  2. 4번 회전하는 for문을 통해 숫자를 생성한다.

  3. 회전할 때마다, 최대의 숫자를 찾으며, 뒷쪽으로 들어갈 숫자를 남기고 찾는다.

  4. 만약 2번째 index에서 수를 찾는다면, 다음 숫자의 for문은 3번째 index에서 시작

  5. 모든 수를 찾아 리턴한다.

전체 코드


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class Solution
{
    public static string solution(string number, int k)
    {
        StringBuilder sb = new StringBuilder();
        int index = 0;
        int max = 0;
        for(int i=0; i<number.Length - k; i++)
        {
            max = 0;
            for (int j = index; j <= k + i; j++)
            {
                if (max < number[j] - '0')
                {
                    max = number[j] - '0';
                    index = j + 1;
                }
            }
            sb.Append(max);
        }
        return sb.ToString();
    }
    public static void Main(string[] args)
    {
        string number = "1231234";
        int k =3;
        Console.WriteLine(solution(number,k));
    }
}



결과