0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한사항
function solution(numbers) {
// numbers를 sort함수로 정렬한다
const answer = numbers
.sort((a, b) => {
// 30,34같은 경우에는 34가 앞으로 30이 앞으로 가야하므로
// b와 a를 String형태로 바꿔준후 더해준다
/**
* 1. b(34), a(30) 3430 - 3034
* 2. b가 앞으로온다
* 3. 이런식으로 정렬을 마무리 한뒤
* 4. join으로 숫자형태의 문자열을 만들어준다.
*/
a = a.toString();
b = b.toString();
return b + a - (a + b);
})
.join("");
// 근데 [0,0,0] 은 "0"의 형태로 나와야한다
// 테스트케이스중 하나가 히든케이스로 계속나와서
// 100,200 등등.. 다맞아서 그러면 0이 여러개일수도있겟구나 싶어서 삼항연산자로 처리
// (앞이 0인경우는 0이 연속되는경우 말고 없기에)
return answer[0] == 0 ? "0" : answer;
}
정렬
숫자 자릿수를 무작정 비교하려고하니 너무 오래걸리고 코드가 길어져서 다 지우고 그냥 숫자문자열을 더해주면 3430 3034형태가 되니까 두개를 비교하면 되겟구나 싶어서 (b+a) - (a+b) 형태로하니까 테스트케이스 1개에서 계속 틀렷다
아무리 테스트케이스를 추가해도 전부 맞아서 제한사항을 확인하니 0 또는 양의정수가 담긴 배열이라
[0,0,0,0,0,0,0]
형태면 "0000000"이 나오는걸 확인해서 삼항연산자로 0이 나오게 처리했다.