개발 TIL
프로그래머스 가장 큰 수
문미새
2024. 12. 23. 12:34
728x90
문제
코드
function solution(numbers) {
var answer= '';
const sorted = numbers.map(String).sort((a, b) => (b + a) - (a + b));
answer = sorted.join('');
return answer[0] === '0' ? '0' : answer;
}
해설
numbers배열에 있는 값들을 조합해서 가장 값을 크게 만들면 된다.
배열 sorted에 numbers의 값들을 문자열로 변환해서 임의의 값 중 두 개를 골라 더 큰 값을 가진 쪽으로 정렬을 시킨다.
예제에 있는 [6, 10, 2]로 계산했을 때,
1. 첫 번째 비교
- 정렬 알고리즘에서 a = "6", b = "10"을 선택했다면
- (b + a) = "106", (a + b) = "610"
- "610" > "106"이므로 6이 10보다 앞에 위치한다.
2. 두 번째 비교
- 다음으로 a = "6", b = "2"를 비교했다면
- (b + a) = "26", (a + b) = "62"
- "62" > "26"이므로 2가 6보다 뒤에 위치한다.
3. 마지막 비교
- a = "10", b = "2"를 비교하면:
- (b + a) = "210", (a + b) = "102"
- "210" > "102"이므로 2가 10보다 앞에 위치한다.
따라서 정렬은 [6, 2, 10]이 된다.
해당 방식으로 정렬을 진행한 후 join함수로 배열을 하나의 문자열로 붙인다.
이 후 값을 반환할 때 모든 값이 0이라면 그냥 0을 반환해주는 예외처리까지 해준다.(풀이 사례 중에 예외처리를 안해서 테스트 케이스가 틀렸다는 분이 계셨다.)
728x90