JUST GO
[Java] TEST2 본문
Q1.
콜라츠(Collatz) 추측 : 콜라츠 추측이란, 1보다 큰 자연수 n에 대해 이가 짝수라면 2로 나누고, 홀수라면 3을 곱한 뒤 1을 더한 다음, 이러한 절차를 재귀적으로 반복하면 결국에는 1이 될 것이라는 추측이다.
가령, 17의 경우,
1회차 : 52 (17 * 3 + 1)
2회차 : 26 (52 / 2)
3회차 : 13 (26 / 2)
4회차 : 40 (13 * 3 + 1)
...
10회차 : 4 (8 / 2)
11회차 : 2 (4 / 2)
12회차 : 1 (2 / 1)
즉, 17이라는 수는 12회만에 1이되는 콜라츠 수가 되는 것이다.
주어진 정수인 매개변수 n이 몇 회차 만에 1이 되는가에 대한 정수를 반환하는 함수 'calcCollatz'를 만들고 아래 문제를 해결하세요. 단, 100만회까지 1이되지 않는다면 -1을 반환(콜라츠 수가 아님)하세요. 추가로, 매개변수 n에 1을 전달할 경우 이는 이미 콜라츠 수 임으로 0을 반환하세요.
1. 1부터 10000까지의 숫자가 각 몇 회 만에 1이 되는지 아래 예 처럼 출력하세요.
1 : 0
2 : 1
3: 7
...
10000 : 29
public class Collatz {
public static void main(String[] args) throws Exception {
System.out.println( calCollatz(8) );
// Unhandled exception : InvalidCollatzNumberException
}
public static int calCollatz(int n) throws InvalidCollatzNumberException { // n이 1까지 도달하는 회차
if(n<1) {
throw new InvalidCollatzNumberException(); // 던져라
}
int cycle = -1;
for (int i = 0; i < Integer.MAX_VALUE; i++){
if (n == 1) {
cycle = i;
break;
}
n = n % 2 == 0 ? n /2 : n * 3 + 1;
}
return cycle;
}
}
class InvalidCollatzNumberException extends Exception { // 나만의 커스텀 메뉴얼
}
'Java > TEST' 카테고리의 다른 글
[Java] TEST6 (0) | 2022.10.20 |
---|---|
[Java] TEST5 (0) | 2022.10.19 |
[Java] TEST4 (0) | 2022.10.19 |
[Java] TEST3 (0) | 2022.10.19 |
[Java] TEST1 (1) | 2022.10.12 |