-
[Algorithm] 프로그래머스 - 가장 큰 수 (정렬 - Sorting)Alogorithm 2020. 5. 24. 18:09반응형
프로그래머스 문제입니다.
[JAVASCRIPT] SORT() 함수의 함정 포스팅을 참고하시면 도움이 됩니다.
daniel-park.tistory.com/14[문제설명]
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!
반응형'Alogorithm' 카테고리의 다른 글
[Algorithm] 프로그래머스 - 타겟 넘버 (bfs || dfs - 너비 || 깊이 우선탐색) (0) 2020.05.27 [Algorithm] 프로그래머스 - 소수 찾기 (브루트포스 - Brute Force) (0) 2020.05.25 [Algorithm] 프로그래머스 - 프린터 (스택, 큐 - Stack, queue ) (0) 2020.05.23 [Algorithm] 프로그래머스 - 모의고사 (브루트포스 - Brute Force) (0) 2020.05.21 [Algorithm] 프로그래머스 - 완주하지 못한 선수 (해시 - Hash) (0) 2020.05.19