못생긴 숫자(Ugly Number)란?
십진수 체계에서 못생긴 숫자(Ugly Number)란 소인수가 오직 2, 3, 5뿐인 양의 정수를 의미합니다.
예를 들어, 1부터 10까지의 모든 정수는 못생긴 숫자에 해당하며, 12(= 2 × 2 × 3) 역시 소인수가 2와 3뿐이므로 못생긴 숫자입니다. 반면 14처럼 소인수로 7을 포함하는 수는 못생긴 숫자가 아닙니다.
판별 알고리즘
주어진 수가 못생긴 숫자인지 확인하는 방법은 매우 직관적입니다. 수를 2, 3, 5로 나눌 수 있는 동안 계속 나누어 주고, 그 과정을 거쳐 최종적으로 1이 되면 해당 수는 못생긴 숫자입니다. 만약 2, 3, 5 중 어느 것으로도 나누어 떨어지지 않는 값이 남는다면, 그 수에는 다른 소인수가 존재한다는 뜻이므로 못생긴 숫자가 아닙니다.
코드 구현
이제 위 로직을 자바스크립트 함수로 작성해 보겠습니다.
const num = 274;
const isUgly = num => {
while(num !== 1){
if(num % 2 === 0){
num /= 2;
} else if(num % 3 === 0) {
num /= 3;
} else if(num % 5 === 0) {
num /= 5;
} else {
return false;
};
};
return true;
};
console.log(isUgly(num));
console.log(isUgly(60));
console.log(isUgly(140));
실행 결과
콘솔 출력 결과는 다음과 같습니다.
false
true
false
결과 해석
- 274: 2 × 137이므로 소인수 137이 포함되어 있어 false를 반환합니다.
- 60: 2² × 3 × 5로 소인수가 2, 3, 5뿐이므로 true를 반환합니다.
- 140: 2² × 5 × 7로 소인수 7이 포함되어 있어 false를 반환합니다.
이처럼 while 루프와 조건문만으로도 못생긴 숫자 여부를 손쉽게 판별할 수 있습니다.