728x90
문제 설명
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
728x90