정돈된 숫자(Tidy Number)란?
정돈된 숫자란 각 자릿수가 왼쪽에서 오른쪽으로 갈수록 같거나 커지는 순서, 즉 비내림차순으로 배열된 숫자를 의미합니다. 이 글에서는 숫자를 입력받아 해당 숫자가 정돈된 숫자인지 아닌지를 판별하는 JavaScript 함수를 작성해 보겠습니다.
예시
489 → 정돈된 숫자입니다 (4 ≤ 8 ≤ 9)
234557 → 역시 정돈된 숫자입니다 (2 ≤ 3 ≤ 4 ≤ 5 ≤ 5 ≤ 7)
34535 → 정돈된 숫자가 아닙니다 (3 뒤에 5, 다시 3으로 작아짐)
구현 코드
다음은 재귀(Recursion)를 활용하여 정돈된 숫자 여부를 확인하는 코드입니다.
const num = 234789;
const isTidy = (num, last = 10) => {
if(num){
if(num % 10 > last){
return false;
};
return isTidy(Math.floor(num / 10), (num % 10));
};
return true;
};
console.log(isTidy(num));
코드 동작 원리
이 함수는 숫자를 오른쪽 자릿수부터 하나씩 검사하는 재귀 방식으로 동작합니다.
num % 10을 이용해 현재 가장 오른쪽 자릿수를 추출하고, 이전에 검사한 자릿수(last)와 비교합니다. 초기값이 10이므로 첫 번째(가장 오른쪽) 자릿수는 항상 조건을 통과합니다. 만약 현재 자릿수가 오른쪽에 있는 자릿수보다 크다면 비내림차순이 깨진 것이므로 false를 반환합니다. 그렇지 않으면 Math.floor(num / 10)으로 마지막 자릿수를 제거한 뒤 다시 함수를 호출하며, 모든 자릿수 검사가 끝나면 true를 반환합니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
true
234789의 자릿수는 2 → 3 → 4 → 7 → 8 → 9 순으로 계속 커지므로 정돈된 숫자에 해당하며, 결과적으로 true가 출력됩니다.