https://programmers.co.kr/learn/courses/30/lessons/42883
코딩테스트 연습 - 큰 수 만들기
programmers.co.kr
핵심은
최종적으로 출력해야할 (문자열의 길이-1) 만큼 뒷문자열을 남겨두고,
앞의 문자열에서 최대값을 찾아 하나씩 넣어주는 것이다.
입력값이 "4177252841", 4 이면,
최종적으로 출력해야할 길이는 10-4 = 6이다.
1. (1)6-1=5 만큼 뒤에 남겨둔다. (6의자리를 찾는것)
1. (2) 41772 52841
1. (3) 앞의 문자열에서 최대값을 찾는다.
1. (4) 첫번째 "7" (answer = "7")
1. (5) 찾은 인덱스의 앞까지 버린다. (찾을 필요없음) => 7252841
1. (6) 최종적으로 출력해야할값을 -1해준다 => 5
2. (1) 5-1 = 4만큼 뒤에 남겨둔다. (5의 자리를 찾는것)
2. (2) 725 2841
2. (3) 앞의 문자열에서 최대값을 찾는다.
2. (4) "7" (answer = "77")
2. (5) 찾은 인덱스의 앞까지 버린다. (찾을 필요없음) => 252841
2. (6) 최종적으로 출력해야할값을 -1해준다 => 4
3. (1) 4-1 = 3만큼 뒤에 남겨둔다. (4의 자리를 찾는것)
3. (2) 252 841
3. (3) 앞의 문자열에서 최대값을 찾는다.
3. (4) "5" (answer = "775")
3. (5) 찾은 인덱스의 앞까지 버린다. (찾을 필요없음) => 2841
3. (6) 최종적으로 출력해야할값을 -1해준다 => 3
4. (1) 3-1 = 2만큼 뒤에 남겨둔다. (3의 자리를 찾는것)
4. (2) 28 41
4. (3) 앞의 문자열에서 최대값을 찾는다.
4. (4) "8" (answer = "7758")
4. (5) 찾은 인덱스의 앞까지 버린다. (찾을 필요없음) => 41
4. (6) 최종적으로 출력해야할값을 -1해준다 => 2
5. (1) 2-1 = 1만큼 뒤에 남겨둔다. (2의 자리를 찾는것)
5. (2) 4 1
5. (3) 앞의 문자열에서 최대값을 찾는다.
5. (4) "4" (answer = "77584")
5. (5) 찾은 인덱스의 앞까지 버린다. (찾을 필요없음) => 1
5. (6) 최종적으로 출력해야할값을 -1해준다 => 1
6. (1) 1-1 = 0만큼 뒤에 남겨둔다. (1의 자리를 찾는것)
6. (2) 1
6. (3) 앞의 문자열에서 최대값을 찾는다.
6. (4) "1" (answer = "775841")
6. (5) 찾은 인덱스의 앞까지 버린다. (찾을 필요없음) => ""
6. (6) 최종적으로 출력해야할값을 -1해준다 => 0 => 종료
정답: "775841"
function solution(number, k) {
let answer = "";
let fin_len = number.length - k;
while (fin_len) {
let target = number.slice(0, number.length - (fin_len - 1));
for (let i = 9; i >= 0; i--) {
let idx = target.indexOf(`${i}`);
if (idx !== -1) {
answer += `${i}`;
number = number.slice(idx + 1);
fin_len--;
break;
}
}
}
return answer;
}
'개발 > 알고리즘' 카테고리의 다른 글
[Programmers] H-index (0) | 2020.09.11 |
---|---|
[백준] 계단 오르기 (0) | 2020.09.05 |
[Programmers] 스킬트리 (0) | 2020.09.01 |
[Programmers] 다리를 지나는 트럭 (0) | 2020.08.31 |
[Programmers] 문자열 내림차순으로 정렬하기 (0) | 2020.08.30 |