어떤 수 n에 대하여 n이 홀수일 경우, 3을 곱하고 1을 더한다.
n이 짝수일 경우, 2로 나눈다.
n이 1이 될 때까지 반복하며 그 과정을 출력하는 프로그램을 만들어보자.
먼저, 본인은 다음과 같은 변수를 선언했다.
private int N;
private boolean tf;
private int cnt;
입력받을 N과, while문을 제어하기 위한 boolean 변수 tf, 그리고 몇 번째만에 콜라츠 추측이 이루어지는지를 보기 위한 cnt 변수를 선언했다.
다음은 콜라츠 추측일 증명하기 위한 부분이다.
while(collatz.tf) {
collatz.cnt++;
if(collatz.N % 2 == 0) {
collatz.N = collatz.N / 2;
System.out.println("[" + collatz.cnt + "] : " + collatz.N);
} else {
collatz.N = (collatz.N * 3) + 1;
System.out.println("[" + collatz.cnt + "] : " + collatz.N);
}
if(collatz.N == 1) {
collatz.tf = false;
}
}
반복문이 돌아갈 때마다 카운트를 증가하며, N에 대하여 짝수일 때, 홀수일 때마다 해당 작업을 하고 과정을 출력한다.
N이 1이 되면 while문을 빠져나오기 위해 tf에 false 값을 넣는다.
최종 코드는 다음과 같다.
import java.util.Scanner;
public class Collatz {
private int N;
private boolean tf;
private int cnt;
public static void main(String[] args) {
Collatz collatz = new Collatz();
Scanner sc = new Scanner(System.in);
collatz.tf = true;
collatz.cnt = 0;
System.out.print("콜라츠 추측 : ");
collatz.N = sc.nextInt();
while(collatz.tf) {
collatz.cnt++;
if(collatz.N % 2 == 0) {
collatz.N = collatz.N / 2;
System.out.println("[" + collatz.cnt + "] : " + collatz.N);
} else {
collatz.N = (collatz.N * 3) + 1;
System.out.println("[" + collatz.cnt + "] : " + collatz.N);
}
if(collatz.N == 1) {
collatz.tf = false;
System.out.println("");
}
}
}
}