시작이 반

[프로그래머스] 큰 수 만들기(Java 자바) 본문

알고리즘/Programmers

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

G_Gi 2021. 9. 15. 23:17
SMALL

https://programmers.co.kr/learn/courses/30/lessons/42883?language=java# 

 

코딩테스트 연습 - 큰 수 만들기

 

programmers.co.kr

문제 설명

어떤 숫자에서 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"

class Solution {
    public String solution(String number, int k) {
        String answer = "";
        StringBuilder sb = new StringBuilder();
        int n = number.length() - k;
        int end = -1;
        for(int i = 0; i < number.length() - k; i++){
            int max = 0;
            int maxIdx = number.length() - n;

            for(int j = end+1; j < number.length() - n + 1; j++){
                int now = Integer.parseInt(String.valueOf(number.charAt(j)));
                if(now == 9){
                    max = 9;
                    maxIdx = j;
                    break;
                }
                
                if(max < now){
                    max = now;
                    maxIdx = j;
                }
            }
            end = maxIdx;
            sb.append(max);
            n--;
        }

        answer = sb.toString();
        return answer;
    }
}

핵심 코드, 푸는법:

해당 자리수의 최대값을 찾기 위해 number을 확인하면서 해당 자리수까지 최대값과 그 인덱스 찾기

9일때는 break

자리수를 줄여가면서 찾은 인덱스부터 다시 반복

 

ex)

number = "1231234"

k = 3

4자리 숫자가 만들어져야함

 

4번째 자리

1231234 -> 1231을 확인하면서 최대값과 그 인덱스 찾기  -> 최대값 : 3, 인덱스 : 2

 

result = 3xxx

 

3번째 자리

이전 최대값 인덱스 : 2

1231234 -> 이전에 찾은 인덱스 다음부터 3번째 자리까지 확인 -> 최대값 : 2, 인덱스 : 4

 

result = 32xx

 

2번째 자리

이전 최대값 인덱스 : 4

1231234 -> 최대값 : 3, 인덱스 : 5

 

result = 323x

 

1번째 자리

이전 최대값 인덱스 : 5

123123-> 최대값 : 4, 인덱스 : 6

 

result = 3234

1번째 자릭까지 구했으므로 종료

 

*9이면 무조건 최대값 

LIST