Algorithm | 정수 내림차순으로 배치하기

문제 설명

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

제한 조건

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

예시

nresult
118372873211

📍나의 풀이 1

function solution(n) {
    let result = String(n).split('').sort().reverse().join('');
    result = Number(result);
    return result;
}

📍 나의 풀이 2

function solution(n) {
    let result = String(n).split('').map(v=>Number(v));
    for(let i=1; i<result.length; i++){
        let temp = result[i];  //현재값 저장
        let j=i-1; //비교 인덱스 시작점 생성
        
        while(j>=0 && result[j]<temp){ // partical arr의 값이 현재값 보다 작을 때 swap
            result[j+1] = result[j];
            j--;
        }
        result[j+1] = temp; // j-- 이후 실행 -> +1
    }
    result = Number(result.join(''))
    return result;
}

더 가독성이 떨어지지만 삽입정렬을 활용해보았습니다.


숫자로 푸는 것이 더 빠르다는 의견이 있었습니다.

문자풀이

숫자 풀이

=> 문자...풀이가 더 빠른 것 같습니다??? 그래도 생각하지 못한 형태의 풀이법이라서 한번 풀어봤습니다.

다른 풀이(숫자 풀이)

// 숫자 풀이
function solution2(n){
  let nums = [];
  do{
    nums.push(n%10); // 제일 뒷자리 nums로 푸시
    n = Math.floor(n/10);// 제일 뒷자리 소거
  }while(n>0) // while이 참일 떄 do구문을 한번 더 실행, 거짓이라면 아래의 구문을 실행
  return nums.sort((a,b)=>b-a).join('')*1
}

do...while문

do...while 문은 테스트 조건이 거짓으로 평가될 때까지 지정된 구문을 실행하는 루프를 만듭니다.
단, 구문이 실행된 뒤에 테스트 조건이 평가됨으로 구문은 무조건 한 번은 실행됩니다.

do구문
while (조건식);

  • 구문

테스트 조건이 참일 때마다 한 번이상 실행되는 구문입니다. 만약 루프 내에서 여러 구문을 반복 실행 시키고 싶으시다면, 다음 명령을 사용합니다.

block 구문을 활용하여 ({ ... }) 이런 식으로 그룹화합니다.

  • 조건식

루프가 실행될 때마다 평가되는 식입니다. 만약 조건식이 참으로 평가되었다면, 구문 이 다시 실행됩니다. 만약 조건식이 거짓으로 평가되었다면, 자바스크립트는 do...while. 구문 밑에 있는 구문들을 실행시킵니다.

좋은 웹페이지 즐겨찾기