함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
function solution(n){
// 숫자를 문자열로 변환해 나누어 배열화 -> 내림차순 정렬
let array = n.toString().split('').sort((a,b) => {
return b - a;
});
// 문자열 데이터를 더해서 누적시키고 결과 값을 answer에 저장
const answer = array.reduce((acc, cur, index)=> {
acc += cur;
return acc;
})
// 문자열 -> 정수형으로 변환하여 반환한다.
return parseInt(answer);
}
으음 그래도 전에 풀던 C++방식의 틀에서 조금 벗어난 것 같다. 자바스크립트에서 기본적으로 제공해주는 메소드를 사용하는 것에 익숙해지도록 노력 하고있다. 그래도 뭔가 부족하다. 내가 놓친 부분이 있을 것 같은 느낌이다. 다른 사람의 풀이를 보면 또 한번 배우겠지 ㅎㅎ;
테스트 수행 속도는 0.05ms ~ 0.15ms로 나왔다.
function solution(n) {
const newN = n + "";
const newArr = newN
.split("")
.sort()
.reverse()
.join("");
return +newArr;
}
내가 작성한 것과 다른점은 n + ""
로 toString()
과 똑같은 기능 다른방법으로 했다는 점, reverse()
로 정렬된 것을 반전시키고 join("")
로 배열의 요소들을 하나의 문자열로 합쳐줬다는 점이다. 테스트 수행 속도는 0.4ms ~ 0.11ms 나온다.
*
array.join([separator])
는 배열의 모든 요소를 연결해 하나의 문자열로 만들어준다.
sparator
: 배열의 각 요소를 구분할 문자열을 지정해주는 옵션이다.
['Fire', 'Air', 'Water'].join()
-> "Fire,Air,Water"
[4,5,6,7,9].join('')
->"45679"
[4,5,6,7,9].join('B,')
-> "4B,5B,6B,7B,9"
아! 그리고 나도 위에 푼 방법을 조금 바꿔서 풀어봤다.
const solution = (n) => +n.toString().split("").sort().reverse().join('');
테스트 수행 속도를 보니 하나 정도가 0.15ms로 조금 튀는게 신경쓰이지만 하나를 제외하면 나머지는 0.04ms ~ 0.06ms로 나왔고, 다른 풀이 방법보다 빠르게 나왔다.
참고 자료 및 사이트 (감사합니다)