문제 자체는 그리 어렵지 않았지만, 문제를 이해하는 게 어려웠던 문제... 특히 영어로 되어 있어서 더더욱...
간단하개 말해서 오로지 2, 3, 5로만 나눠지는 수를 구하는 거다. 해당 수를 Ugly Number로 지칭하는데 왜 그런지는 모르겠다...
여기서 주의해야 할 점이 하나 있는데, 문제에서는 오로지 양의 정수만을 설명했지만 입력값으로 음의 정수가 나올 수도 있다. 그러므로 음의 정수가 나올 때는 false를 반환한다.
2, 3, 5로 차례대로 n을 나눠준다. 만일 2 혹은 3 혹은 5로 n이 나눠지면 나눠질 때 까지 반복문을 반복한다. 그리고 더이상 나눠질 수 없으면 다른 숫자로 위의 과정을 반복한다.
그렇게 해서 n이 1이 되면 2, 3 혹은 5로 나눠 떨어진다는 의미이니 true를 반환하고 아니라면 false를 반화하면 된다.
class Solution {
public boolean isUgly(int n) {
//2, 3, 5 중 아무거나 나눠지면 ugly number이라는 뜻
if(n <= 0 ){
return false;
}
int[] num = new int[] {2, 3, 5};
for(int i : num){
n = Divide(n, i);
}
if(n != 1){
return false;
}
return true;
}
public int Divide(int n, int i){
while(n%i == 0){
n = n/i;
}
return n;
}
}
소인수를 prime numbers이라고 한다.