본문 바로가기
D.evelop [CS]/Algorithm

[Algorithm 029] JS - 정수 내림차순으로 배치하기 (Level 01)

by Danne 2021. 11. 22.

문제 출처 : 프로그래머스 prorammers  - 정수 내림차순으로 배치하기 (링크)

 

문제 설명

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

 

제한사항

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

처음 접근 법

숫자값에 변화를 주지 않고 사용해보려 생각했다.

하샤드 수 문제와 비슷하게 10으로 나눈 나머지 값으로 각 자릿 수를 때어내 접근 할 수 있을 것이라 생각했다.

function solution(n) {
    var answer = n;
    var arr = []

    do{
        arr.push(answer % 10);

    } while(answer > 0)
  
    return arr;
}

실패

 

A.  내가 푼 답

function solution(n) {
  var answer = [...(n.toString())].sort().reverse().join('');
  return Number(answer);
}

 

결국 익숙한 방식에 의존해버렸다.

 

 

 

B. 다른 사람의 풀이

자료형의 변화 없이 풀어간 답

function solution(n) {
    var nums =[];
    do{
        nums.push(n % 10);
        n = Math.floor(n / 10);
    } while(n > 0)
    
    return nums.sort((a, b) => b - a).join('') * 1;
}

n % 10은 표현식이다.

즉 n % 10에서 나오는 결과값을 값으로 가질 뿐, 이 식을 통해 n이 10으로 나누어진 값으로 갱신되는게 아니다.

그래서 루프를 돌때 마다 n / 10의 값을 갱신해줘야한다.

 

solution(118372); 과 같이 호출할 경우 루프를 돌 때마다 아래값과 같이 되도록.

n = 11837  arr = [2]
n = 1183   arr = [2, 7]
n = 118    arr = [2, 7, 3]
n = 11     arr = [2, 7, 3, 8]
n = 1      arr = [2, 7, 3, 8, 1]
n = 0      arr = [2, 7, 3, 8, 1, 1]

 

 

 

 

 

 

 

반응형

댓글