코딩테스트 문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 접근)
numbers의 길이 10^5 이하 이므로 시간복잡도 O(N^2) 미만의 알고리즘으로 풀면 됩니다 (이중 for문 X)
정답 및 해설
정답
function solution(numbers) {
const result = numbers.map(String).sort((a, b) => {
return (b+a) - (a+b)
}).join('')
return result[0] === '0' ? '0' : result;
}
해설
1. 일단 처음에 numbers.map(String)으로 숫자를 문자로 변환합니다.
2. 변환된 문자를 정렬합니다. sort 에서 변환된 문자는 더하면 글자가 이어서 보여지므로 ex) ('6'+'10') - ('10' + '6')은 '610' - '106'이므로 정렬하면 큰숫자가 앞으로 정렬되게 됩니다.
3. 정렬된 배열들을 join을 이용하여 하나로 합칩니다.
4. 문자열은 배열의 연속된 값이므로 result[0] 이 만약에 0이 출력되면 0을 결과값으로, 아니면 결과값 result를 반환하면 해결됩니다.