프로그래머스 (탐욕법) - 큰 수 만들기
해당 문제를 풀때에는 처음에는 문제를 제대로 이해 하지 못해 각 자릿수의 수를 구해 number 자리수 - k 자리수의 가장 큰수를 구했었습니다. 이후 문제를 이해해 보니 입력받은 문자의 순서는 유지한채로 k 만큼 수를 제거 했을 때 가장 큰수를 구하는 문제였습니다. 순서를 유지 해야 할 경우 가장 큰 수를 만들려면 앞자리가 가장 큰 것이 중요하기에 앞에서 k번째까지의 수중 가장 큰수가 있는 수까지 과감하게 제거 하는 방향으로 진행했습니다. base case는 제거해야하는 자릿수와 입력받은 숫자의 자릿수가 동일 할 때와 남은 제거해야 하는 수가 없을 경우 2가지로 정해 로직을 구현했습니다.
public String solution(String number, int k) {
if (number.length() == k) {
return "";
}
char maxDigitNumber = 0;
int maxDigitIndex = 0;
int remainK = k;
for (int i = 0; i<= k; i++) {
char temp = number.charAt(i);
if (temp > maxDigitNumber) {
maxDigitNumber = temp;
maxDigitIndex = i;
}
}
remainK -= maxDigitIndex;
if (remainK == 0) {
return number.substring(maxDigitIndex);
} else {
return maxDigitNumber + solution(number.substring(maxDigitIndex + 1), remainK);
}
}
'정리 > 알고리즘' 카테고리의 다른 글
탐욕법 - 섬 연결하기 (0) | 2022.03.02 |
---|---|
탐욕법 - 구명보트 (0) | 2022.03.01 |
완전탐색 - 카펫 (0) | 2022.02.21 |
완전탐색 - 소수찾기 (0) | 2022.02.19 |
완전탐색 - 모의고사 (0) | 2022.02.17 |
댓글