코딩테스트 | (JavaScript) 프로그래머스 : 정수 내림차순으로 배치하기

trevor1107·2021년 8월 13일
0

✅문제

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

❕ 제한사항

  • n은 1이상 8000000000 이하인 자연수입니다.

🎹📢입출력 예제

✍풀어보기

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로 나왔고, 다른 풀이 방법보다 빠르게 나왔다.



참고 자료 및 사이트 (감사합니다)

profile
프론트엔드 개발자

0개의 댓글