✏️ 문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
numbers | return |
[6, 10, 2] | "6210" |
[3, 30, 34, 5, 9] | "9534330" |
✏️ 문제 풀이
function solution(numbers) {
const answer = numbers.sort((a,b) => `${b}${a}` - `${a}${b}`);
return answer[0] === 0 ? ""+answer[0] : answer.join('');
}
3, 30 예시에서 30이 더 큰 수이지만 3이 앞으로 가야 330이 303보다 크므로 각 자리를 바꿔 비교해준다.
const answer = numbers.sort((a,b) => `${a}${b}` - `${b}${a}`);
반대로 하면 제일 작은 수를 구할 수 있다.
- 다른 풀이
function solution(numbers) {
numbers.sort((a,b)=>{
let sa = a.toString();
let sb = b.toString();
return parseInt(sa + sb) > parseInt(sb + sa) ? -1 : 1;
})
if(numbers[0] === 0) return '0'
return numbers.join('')
};
이 역시 같은 원리이지만 더 쉽게 이해 가는 코드인 것 같다. 문자열로 변환해줘 각 숫자를 붙여주고 다시 숫자로 변환해 앞뒤를 바꾼 값을 비교해준다. 330이 303보다 크므로 -1을 반환해 뒤로 정렬된다.
비교함수의 반환값이 0보다 작으면 비교함수의 첫 번째 인자를 우선하여 정렬하고, 0이면 정렬하지 않으며, 0보다 크면 두번째 인수를 우선하여 정렬한다.
참고 사이트
🙂 공부하며 정리하는 글입니다. 공감과 피드백 환영합니다.
'Algorithms > 코테 문풀' 카테고리의 다른 글
[프로그래머스] 예산 - JavaScript (0) | 2023.01.26 |
---|---|
[정렬] H-Index - JavaScript / 11, 16번 테스트 케이스 통과하기 (0) | 2023.01.25 |
[프로그래머스] 같은 숫자는 싫어 - JavaScript / Array에서 중복값 제거 방법 정리 (0) | 2023.01.25 |
[프로그래머스] 숫자의 표현 - JavaScript (0) | 2023.01.24 |
[프로그래머스] 최대공약수와 최소공배수 - JavaScript (0) | 2023.01.23 |