[Algorithm] 프로그래머스 - 가장 큰 수 (정렬 - Sorting)
프로그래머스 문제입니다.
[JAVASCRIPT] SORT() 함수의 함정 포스팅을 참고하시면 도움이 됩니다.
daniel-park.tistory.com/14
[Javascript] sort() 함수의 함정
Array.sort() 프로그래머스 알고리즘을 풀던 중 한 가지 사실을 알게 되었다. const array1 = [1, 30, 4, 21, 100000]; array1.sort(); console.log(array1); 다음 코드의 결과는 [1, 4, 21, 30, 100000] 일 것..
daniel-park.tistory.com
[문제설명]
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
[제한사항]
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
[입력값]
[문제풀이]
function solution(numbers) {
// (1)
const sorted = numbers.sort((current, prev) => {
// (2)
let str_current = String(current)
let str_prev = String(prev)
// (3)
return str_current.charAt(0) > str_prev.charAt(0)
? -1
: str_current + str_prev > str_prev + str_current
? -1
: 1
})
// (4)
return sorted.every(item => item === sorted[0])
? String(sorted[0])
: sorted.join('')
}
idea: Javascript sort() 함수를 customizing 해서 리턴한다.
1. numbers 인풋을 커스터마이즈 된 callback을 사용해 소팅하려한다.
2. current, prev 값을 String으로 캐스팅 해준다. (String 기준으로 소트를 해 줄 필요가 있기 때문)
3. if: String화 했을 때 앞자리 수가 더 크다면 -1을 리턴한다 (오름차순)
else: 이 때 비교할 두 수의 string 값을 합친 것이 current 기준이 더 클 때 -1 (오름차순)을, 작을 때 1 (내림차순)을 리턴한다.
4. if: sorted된 값들이 모두 같은 수라면 하나의 수로 합쳐준다. 예시 [0, 0, 0, 0], [1, 1, 1, 1]
else: 정렬된 배열을 join해준다.
그리고 return!