문제 출처 : 프로그래머스 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]
반응형
'D.evelop [CS] > Algorithm' 카테고리의 다른 글
[알고리즘 이론] 정렬 Sort - 1. 기본 개념 (0) | 2024.04.18 |
---|---|
[Algorithm 030] JS - 자연수 뒤집어 배열로 만들기 (Level 01) (0) | 2021.12.02 |
[Algorithm 028] JS - 최대공약수와 최소공배수 (Level 01) (0) | 2021.11.16 |
[Algorithm 027] JS - 제일 작은 수 제거하기 (Level 01) (0) | 2021.11.14 |
[Algorithm 026] JS - 짝수와 홀수 (Level 01) (0) | 2021.11.13 |
댓글