> 문제
문제 : [큰 수 만들기]
문제풀이
큰 자리수의 값을 최댓값으로 만들면 된다.
지울 수 있는 값 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
PREVIOUS[프로그래머스] Level3 - 여행 경로