티스토리 뷰

문제

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

 

제한 조건

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

 

입출력 예

     n          return

118372     873211

 

풀이 과정

더보기
더보기

이번엔 어떻게 접근해야 하는지는 떠올랐으나, 적절한 메서드가 잘 안떠올랐고 알고 있는 메서드(인줄 알았는데 함수였다)도 제대로 사용하기 어려워했다. 

//정수 n을 문자열로 바꾸고
//하나씩 떼서 - slice? slice는 배열 메서드라서 안됨
//정렬해서
//다시 붙여서
//숫자로 바꾸기

 

n차 코드(자잘한 수정을 거친)

function solution(n) {
    const num = n
    const string = num.toString();
    const spread = [...string]; // ["문","자","열"]
    const sort = spread.sort((a,b)=>{
        return b-a
    })
    const merge = sort.join('');
    const returnNum = Number(merge);
    return returnNum;
}

 

알게 된 것

1. spread operator를 사용하면 문자열도 하나씩 spread 할 수 있다. 

2. join 연산자 : 문자열을 하나로 합칠 때 사용한다. ()처럼 아무것도 안 넣으면 쉼표까지 합쳐버려서 ('')빈 문자열을 넣어주었다. 

3. Number는 메서드가 아니라 함수다..! 

4. 다른 사람의 풀이를 봤는데 메서드 체이닝을 사용할 수 있을 것 같다. 하는 김에 최대한 코드를 리팩토링했다.

 

+이제 보니까 Number 실수를 전 게시글에서 똑같이 했다. ㅋㅋ!

정답 코드

function solution(n) {
    const answer = Number([...n.toString()].sort((a,b)=>{
        return b-a
    }).join(''))
    return answer;
}

 

더 줄일 수 있는지는 모르겠다. 

그리고 이게 가독성이 있나? 싶긴 하다. 다 알고 보면 좀 알 것 같기도 하고 그렇다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함