Description
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
Constraints
n은 1이상 8000000000 이하인 자연수입니다.
My Solution
function solution(n) {
return +((n + '').split('').map((v) => +v).sort((a,b)=> b -a).join(''))
}
메서드만 잘 쓸수 있다면 쉽게 풀 수 있는 문제였다.
- 우선 자연수를 문자열로 만든 후 split으로 각 자릿수들을 원소로 갖는 배열로 만든다.
- 그 후 각 원소들을 숫자로 변환하고, sort로 내림차순(descending order)으로 만든다.
- 그 다음 join으로 스트링으로 만든다. 리턴할 땐 + 기호로 number로 형 변환하여 자연수로 리턴한다.
Other's Solution
function solution(n) {
return +(n + '')
.split('')
.sort((a, b) => b - a)
.join('');
}
알고리즘 스터디에서 새롭게 알게 된 것이다. 바로 배열의 원소를 숫자로 변환하기 위해 map을 굳이 쓸 필요가 없다는 것이다.
왜냐하면 sort는 숫자의 대소 관계를 가지고 정렬하는 것이 아니라, 문자열의 유니코드 포인트를 가지고 정렬하는 메소드이기 때문이다.
또한 sort는 복사본이 만들어지는 것이 아니라 원본 배열을 변경시킨다는 것도 유의하면서 사용해야겠다.
sort의 인자로 compareFunction이 제공되지 않으면 요소를 문자열로 변환하고 유니 코드 코드 포인트 순서로 문자열을 비교하여 정렬된다.
compareFunction이 제공되면 배열 요소는 compare 함수의 반환 값에 따라 정렬된다.
function solution(n) {
const newN = n + '';
const newArr = newN.split('').sort().reverse().join('');
return +newArr;
}
sort()를 아무 인자를 전달하지 않고 쓰면 오름차순으로 정렬한다.
reverse()를 이용해서 모든 순서를 뒤집을 수 있다.
The reverse method transposes the elements of the calling array object in place, mutating the array, and returning a reference to the array.
reverse는 원본 배열을 변경하고, 배열의 참조를 반환한다는 것을 기억해야겠다.
참고 자료
'Algorithms > Programmers' 카테고리의 다른 글
[프로그래머스 Level 1] 자연수 뒤집어 배열로 만들기 (자바스크립트) (0) | 2021.10.10 |
---|---|
[프로그래머스 Level 1] 자릿수 더하기 (자바스크립트) (0) | 2021.10.10 |
[프로그래머스 Level 1] 콜라츠 추측 (자바스크립트) (0) | 2021.10.08 |
[프로그래머스 Level 1] 제일 작은 수 제거하기 (자바스크립트) (0) | 2021.10.07 |
[프로그래머스 Level 1] 행렬의 덧셈 (자바스크립트) (0) | 2021.10.05 |