문제 설명
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) {
let answer = ''
answer=numbers.map(v=>v+"").sort((a,b)=>{
return (b+a)*1-(a+b)*1
})
return answer[0]==0?'0':answer.join('')
}
풀이전략
1. 주어진 numbers 배열을 map 메소드를 이용해서 string 형으로 바꾼다
2. 현재 값과 다음 값을 합쳐서 숫자로 바꾼 값이 더 큰 순서대로 내림차순 정렬
3. "00000"이 주어질 경우 "0"을 반환해야 하기 때문에 삼항 연산자로 예외처리
4. 나머지 경우는 answer을 문자열 한개로 합친 값 반환
배운 점 )
테스트 케이스 오류로 다른 분들의 풀이를 참고 하며 sort를 저렇게도 사용할 수 있음을 배웠다.
sort 가 x-y가 양수일 때는 둘을 바꾸고 음수일 때는 냅두는 원리를 알게 되었다.
sort의 원리를 잘 알지 못하고 썼던게 조금 부끄럽고 앞으로는 sort메소드를 능수능란하게 쓸 수 있었으면 좋겠다.
참고자료 )
https://hianna.tistory.com/409
[Javascript] 배열 정렬하기 (오름차순, 내림차순, 문자열, 객체)
배열 정렬하기 (오름차순, 내림차순, 문자열, 객체) 1. sort() 함수 2. sort() 함수로 숫자 오름차순 정렬하기 3. sort() 함수로 숫자 내림차순 정렬하기 4. sort() 함수로 문자열 정렬하기 5. sort() 함수로
hianna.tistory.com