2021. 5. 4. 13:30ㆍFront-end/알고리즘
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
numbers의 길이는 1 이상 100,000 이하입니다. numbers의 원소는 0 이상 1,000 이하입니다. 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
numbers | return |
[6, 10, 2] | 6210 |
[3, 30, 34, 5, 9] | 9534330 |
내가 작성한 코드 (자바스크립트)
function solution(numbers) {
let answer = numbers.sort((a, b) => {
return String(b) + String(a) - (String(a) + String(b));
});
answer = answer[0] === 0 ? "0" : answer.join("");
return answer;
}
arr.sort([compareFunction])
: 인자로 정렬 순서를 정의하는 함수를 넣는다. 생략하면 배열은 각 요소의 문자열 변환에 따라 각 문자의 유니 코드 코드 포인트 값에 따라 정렬된다.
반환값으로 새로운 배열 값을 만드는 것이 아닌, 원 배열의 정렬된 배열 값이 나온다.
- compareFunction(a, b)이 0보다 작은 경우(음수) a를 b보다 낮은 색인(인덱스)으로 정렬한다.. 즉, a가 먼저 온다.
- compareFunction(a, b)이 0을 반환하면 a와 b를 서로에 대해 변경하지 않고 모든 다른 요소에 대해 정렬한다.
- compareFunction(a, b)이 0보다 큰 경우(양수), b를 a보다 낮은 인덱스로 정렬한다. b가 먼저온다.
- compareFunction(a, b)은 요소 a와 b의 특정 쌍이 두 개의 인수로 주어질 때 항상 동일한 값을 반환해야 한다. 일치하지 않는 결과가 반환되면 정렬 순서는 정의되지 않는다.
우선 두번째 입출력에서 numbers = [3, 30, 34, 5, 9]인데
답이 9534330이므로 9,5,34,3,30 순으로 정렬되기 위해서는
자바스크립트의 sort 함수를 이용해야 하는데, 이 때 3과 30이 비교 대상이라면 '330'이 큰지 '303'이 큰지 비교하여 정렬을 해주어야 한다. 이 때 3, 30 순으로 정렬이 되어야 큰 수 이기 때문에 sort안에 들어갈 compareFunction(a,b)는 음수가 나와야 한다. 그러므로 (b+a) - (a+b)를 return으로 넣어준다. 이 때 그냥 더하는게 아니라 문자열로 단순히 붙여주어야 하기 때문에 String을 사용한다.
그리고 또 하나로, numbers에 모두 0 이 들어가 있을 경우도 생각해야 한다.
만약 numbers = [0,0,0]이라면 answer는 000이 되는데, 이 경우에는 0이라고 출력해야 하므로
answer의 첫번째 원소가 0 이라면 answer는 0으로 출력하도록 삼항연산자를 사용한다.
'Front-end > 알고리즘' 카테고리의 다른 글
[백준] 2108. 통계학 (자바스크립트/js/javascript/node.js) (0) | 2021.05.05 |
---|---|
[알고리즘] 정렬 - 합병정렬(병합정렬, Merge Sort) (자바스크립트/javascript) (0) | 2021.05.05 |
[알고리즘] 정렬 - 빠른 정렬(퀵정렬, Quick Sort) (자바스크립트/javascript/node.js) (0) | 2021.05.04 |
[알고리즘] 정렬 - 버블 정렬(거품 정렬, Bubble Sort) (자바스크립트/javascript/node.js/알고리즘) (0) | 2021.05.03 |
[알고리즘] 정렬 - 삽입 정렬(Insertion Sort) (자바스크립트/node.js/javascript/알고리즘) (0) | 2021.05.03 |