명확한 정리 필요
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
배열의 첫번째 원소들끼리 비교를 해야하나? 등등 별 이상한 생각을 오래 했지만.. 방법을 구할 수 없었다. 다른 사람들 문제 풀이에서 방법을 찾았는데😭
sort
메서드를 이용하여 숫자 정렬을 할 때, 1, 12를 정렬할 때에 사용했던 아래의 방식을 사용하면 된다. 이 방식은 여태까지 많이 마주쳤음에도 추상적으로 대충 알았지, 작동하는 원리를 몰랐기 때문에 응용해서 쓸 수 없었다.
arr.sort(function(a,b){
return a-b;
});
여기서 function(a,b){return a-b}라는 함수는 a,b의 값을 빼서 양수가 나오면 배열에서 자리를 교체하고 음수가 나오면 교체하지 않는다. 여기서 a,b는 양옆에 붙어있는 수 일 수도, 아닐 수도 있다. 따라서 저 방식을 통하면 무조건, 오름차순으로 정렬할 수가 있다. 같은 방식으로 b-a이면 내림차순으로 정렬.
sort((a, b) => (b+a) - (a+b))
따라서 이번 문제는 위의 방식을 통하면 가장 큰 조합부터의 내림차순을 구할 수 있다.
나는 입력받은 정수를 먼저 계산하고, 마지막에 string 으로 변환해 주려고 했는데 자꾸 오답이 나서 다른 사람들의 답안을 보니,먼저 string 으로 변환해주는 식으로 작성하더라. string끼리의 연산이 되는 것인가?
이럴 때마다 기본 기초가 많이 부족한 것 같아서 괴리감이 든다 ㅠㅠ
function solution(numbers)
const answer = numbers
//map으로 numbers를 일관되게 string으로 변환한다.
.map(numbers -> String(numbers))
.sort((a,b) => (b+a) - (a+b))
.join('');
//0인 경우는 제외해야 하니 삼항연산자 사용
return answer[0] === '0' ? '0' : answer;
도움된 사이트 : https://change-words.tistory.com/64
잘보고갑니다!