본문 바로가기

프로그래머스 - JAVA

코딩테스트 연습 > 탐욕법(Greedy) > 큰 수 만들기

이전 코드

import java.util.*;
import java.util.regex.Pattern;

class Solution {
    public String solution(String number, int k) {
        StringBuilder stringBuilder = new StringBuilder();
        int ansLen = number.length() - k;
        
        if(Pattern.matches(number.charAt(0) + "{" + number.length() +"}", number)){
            return number.substring(0, number.length() - k);
        }
        
        if(number.equals("0")){
            return "0";
        } else {
            while (true){
                if (k > 0){
                    String subNum = number.substring(0, k + 1);
                    int maxNum = -1;
                    int maxNumIndex = 0;

                    for (int i = 0 ; i < subNum.length() ; i++){
                        if(Character.getNumericValue(subNum.charAt(i)) == 9){
                            maxNum = 9;
                            maxNumIndex = i;
                            break;
                        }
                        if(maxNum < Character.getNumericValue(subNum.charAt(i))){
                            maxNum = Character.getNumericValue(subNum.charAt(i));
                            maxNumIndex = i;
                        }
                    }

                    stringBuilder.append(String.valueOf(maxNum));

                    number = number.substring(maxNumIndex + 1);
                    k -= maxNumIndex;
                    
                    if(stringBuilder.toString().length() == ansLen){
                        return stringBuilder.toString();
                    }
                } else{
                    stringBuilder.append(number);
                    return stringBuilder.toString();
                }
            }
        }
    }
}

최근 코드

import java.util.*;

class Solution {
    public String solution(String number, int k) {
        String answer = "";
        
        StringBuilder sb = new StringBuilder();
        
        int maxVal;
        int index = 0;
        
        for (int i = 0 ; i < number.length() - k ; i++){
            maxVal = 0;
            for (int j = index ; j <= k + i ; j++ ){
                if (maxVal < number.charAt(j) - '0'){
                    maxVal = number.charAt(j) - '0';
                    index = j + 1;
                }
            }
            sb.append(maxVal);
        }
        return String.valueOf(sb);
    }
}