프로그래머스
function solution(numbers) {
const strArr = numbers.map((el) => String(el));
for(let i=0; i<strArr.length; i++){
strArr.sort((a,b) => Number(b[i]) - Number(a[i]));
}
const res = strArr.reduce((acc,cur) => {
return acc+cur;
},'');
return String(res);
}
반복문과 sort를 모두 사용하다보니 시간초과되는 테스트 케이스가 대부분이었고, 테스트케이스도 통과하지 못했다..
이 문제를 푸는데 가장 중요한 세가지가 있다.
숫자를 문자열로 바꾼다.
sort
를 사용해 이어붙여진 문자열의 크기를 비교한다.
'숫자'
끼리는 뺄셈은 덧셈과 다르게 연산이 된다.ex. '4'-'5' = -1
내림차순으로 정렬된 numbers 배열의 첫번째 요소가 0인 경우 '0'
을 리턴한다.
function solution(numbers) {
let answer = '';
const arr = numbers.map(v => v.toString()).sort((a,b) => (b+a) - (a+b));
return answer = arr[0]==='0' ? '0' : arr.join("");
}
sort를 사용해야한다는 건 알았지만, 어떤 compareFunction을 작성해야하는지는 생각해내지 못했다. 새로운 방법을 배웠으니 잘 기억해 두어야겠다.