개발 공부/코딩 테스트
[프로그래머스] 가장 큰 수 JavaScript
바 질
2024. 2. 27. 21:38
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42746
풀이
function solution(numbers) {
let answer = numbers.map(number => number.toString())
.sort((a, b) => (b + a) - (a + b)).join('')
return answer[0] === '0' ? '0' : answer
}
- map 함수로 numbers 배열의 모든 요소를 문자열로 바뀌준다.
- sort 함수로 배열을 내림차순으로 정렬한다. 이때 비교함수는 (a, b) => (b + a) - (a + b)으로 설정해야 한다. 비교함수의 반환값이 음수면 비교함수의 첫번째 인수가 우선 정렬되고 비교함수의 반환값이 양수면 두번째 인수가 우선 정렬된다는 특징을 활용했다. 예를 들어, numbers 배열이 [’3’, ‘30’, ‘34’]일 때, ‘303’ - ‘330’의 값이 음수이므로(암묵적 타입 변환이 일어난다) ‘3’이 ‘30’보다 우선 정렬된다. 그 다음, ‘3430’ - ‘3034’의 값이 양수이므로 ‘34’가 ‘30’보다 우선 정렬된다. 따라서 sort 함수의 반환값은 [’3’, ‘34’, ‘30’]이 된다.
- join 함수로 배열 안의 모든 요소를 공백없이 합친다.
- numbers 배열의 요소가 0밖에 없는 경우, 예를 들어 numbers가 [0, 0, 0]이면 answer는 ‘000’이 된다. 이는 잘못된 반환값이므로 ‘0’을 반환한다.
모든 배열의 요소가 0일 경우를 생각하지 못해 실패했었는데, 힌트를 보고 조건을 추가하니 성공했다!