[프로그래머스] Level2 - 큰 수 만들기

 
by 박신종

> 문제

문제 : [큰 수 만들기]



문제풀이

큰 자리수의 값을 최댓값으로 만들면 된다.

지울 수 있는 값 K의 갯수만큼 탐색하여 최댓값을 찾아 나머지 값을 지워나갔다.

“4177252841”, k=4 를 예시로, index 0~4 (K+1) 까지 탐색하여 최댓값을 찾는다.

여기서 index 4 까지 탐색하는 이유는, 최댓값 이전의 값을 지우기 때문이다.

풀이에서는 최댓값을 StringBuilder에 추가하고 이전의 갯수를 K값에서 줄여나갔다.

4 1 7 7 2 ( K=4 ) max 7, K = 4 - 2

7 2 5 ( K = 2 ) max 7, K = 2 - 0

2 5 2 ( K = 2 ) max 5, K = 2 - 1

2 8 ( K = 1 ) max 8, K = 1 - 0

소스는 다음과 같다.


package programmers.level2;

class Solution {
    static public String solution(String number, int k) {
        StringBuilder sb = new StringBuilder();
        int length = number.length();
        int num, max, maxIndex;
        for(int i=0; i<length; i++) {
        	max = -1;
        	maxIndex = -1;
        	for(int j=i; j<i+k+1 && j<length; j++) {
        		num = number.charAt(j)-48;
        		if(num > max) {
        			max = num;
        			maxIndex = j;
        		}
        	}
        	k-=(maxIndex-i);
        	i = maxIndex;
        	sb.append(max);
        	if(k <= 0) {
        		sb.append(number.substring(i+1));
        		break;
        	}
        }
        
        return k>0 ? sb.substring(0, length-k): sb.toString();
    }
}




문제 출처 : Programmers