본문 바로가기
알고리즘(프로그래머스)

프로그래머스 큰 수 만들기(자바)

by coie 2021. 4. 25.

문제 설명

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

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

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

 

 

제한 조건

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

입출력 예

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

 

 public static String solution(String number, int k) {

        String answer = "";
        StringBuilder sb = new StringBuilder();
        int cur = 0;
        int temp = 0;
        for(int i=0; i<number.length() -k; i++) {
            int max = 0;
            for(int j=cur; j<=i+k; j++) {
                int num = number.charAt(j)-'0';
                if(max < num) {
                    temp = j;
                    max = num;
                }
            }
            sb.append(max);
            cur = temp+1;
        }
        answer = sb.toString();
        return answer;
    }

 

일단 String의 각 값들을 비교해야 하므로

char을 이용하고

그걸 조합하기 위해서 StringBuilder까지 사용해야 한다.

그리고 총 구해야 하는 자릿수는

number.length()-k이다.

 그리고 이중 반복문으로 돌려서 값을 구하면 된다.

 

맨 처음에는 가장 높은 값이라고 생각하고 

작성했는데 return 값을 보면 

가장 높은 값이 아니라 가장 낮은 값을 지우는 느낌을 받았다.

(3234 가 제일 높은 수라는 것을 보고)