문제에서 주어진 값 : 정수 배열
결과 값 : 주어진 정수들을 이여붙여 만들 수 있는 숫자들 중 가장 큰 수
수도 코드
1. 앞자리가 큰순서대로 정렬되야 한다.
2. 주어진 배열을 위 순서대로 내림차순 정렬한다.
3. 정렬된 배열을 reduce함수를 이용해서 하나의 문자열 숫자로 만든다.
단, 같은 숫자로 시작하는 숫자의 경우, 두 값을 비교해서 정렬한다.
예를들어, 3과 31의 경우 [3, 31] 순으로 정렬되어야 한다.
3과 36의 경우 [36, 3] 순으로 정렬되어야 한다.
이 조건을 어떻게 정렬할 수 있을까?
위 내용을 기반으로 작성된 코드는 다음과 같습니다.
function solution(numbers) {
const sorted = numbers.map(String).sort((a, b) => {
return (b + a).localeCompare(a + b)
})
return sorted.reduce((acc, curr) => {
return `${acc}${curr}`
})
}
다만, 위 코드로 제출시 한 문제가 통과가 되지 않았습니다. 생각하지 못한 경우의 수는 뭐가 있을까요?
바로, 0만으로 이루어진 배열의 경우 다음과 같은 문제가 발생합니다.
[0,0,0,0] => 결과 "0000"
이러한 경우를 방지하기 위해 reduce함수에 다음 조건문을 추가해 줍니다.
if(acc === "0") {
return acc;
}
완성된 전체 코드는 다음과 같습니다.
function solution(numbers) {
const sorted = numbers.map(String).sort((a, b) => {
return (b + a).localeCompare(a + b)
})
return sorted.reduce((acc, curr) => {
if(acc === "0") {
return acc;
}
return `${acc}${curr}`
})
}
이렇게 프로그래머스 "정렬" 문제인 큰 수 찾기 문제를 해결할 수 있었습니다.