JUST GO

[Java] TEST2 본문

Java/TEST

[Java] TEST2

root_go 2022. 10. 13. 17:20

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