728x90
제출 답안
function solution(numbers) {
let answer = '', i, numbers_sort = [], number;
if(Math.max(...numbers)===0) {
return '0';
}
for(i=0; i<numbers.length; i++) {
number = numbers[i];
numbers_sort.push([String(number).padEnd(4, number), number]);
}
numbers_sort.sort().reverse();
answer = [...numbers_sort.map(n=>n[1])].join('')
return answer;
}
풀이 과정
0만 들어 오는 경우 "0000" 으로 반환될 우려가 있으므로 제일 첫 부분에 체크하는 조건문을 작성하였다.
1000이하의 수가 주어진다는 점을 응용할 방법이 없을까 찾아보던 중 숫자를 반복하여 4자리 수로 만들면 된다는 사실을 알아내었다. 그 부분만 차용하여 문자열 내림차순으로 정렬시켰고 결과는 주어진 숫자를 join() 하여 return 하도록 하였다.
다른 사람들의 풀이 분석
다른 사람들의 풀이를 살펴보니 javascript 의 sort() 함수내에서 앞뒤 문자열 중 큰 값을 비교하여 정렬하는 방법이 있더랬다 ㅠㅠ (그럼 테스트 통과 시간이 더 빨라졌을텐데!!) 궁금한건 참지 못하니 다른 분의 답안을 돌려보기로 했다.
function solution(numbers) {
var answer = numbers.map(v=>v+'')
.sort((a,b) => (b+a)*1 - (a+b)*1)
.join('');
return answer[0]==='0'?'0':answer;
}
성능이 두 배 가까이 차이가 난다. map의 v+''이 숫자를 문자로 바꾸고 sort에선 앞뒤 정렬기준을 두 수를 합하였을 때 큰 수를 출력토록 한 것이다. 이 때 숫자로 되돌려 주기 위해 *1까지 해주고 return 할 땐 '000~'을 방지하는 코드까지 ㅠㅠ 다른 분들의 풀이를 보며 깨닫는게 많아진다.
728x90
'Study Note > Algorithm' 카테고리의 다른 글
프로그래머스 #완전탐색 - 소수 찾기 lv2 (0) | 2021.09.12 |
---|---|
프로그래머스 #스택/큐 - 프린터 lv2 (0) | 2021.09.10 |
프로그래머스 #데모 테스트 - 직사각형 마지막 한점 좌표 구하기 (0) | 2021.01.22 |
프로그래머스 #완전탐색 - 모의고사 lv1 (0) | 2021.01.22 |
프로그래머스 #월간 코드 챌린지 시즌1 - 두 개 뽑아서 더하기 lv1 (0) | 2021.01.22 |
댓글