반응형

백준 13236번 Collatz Conjecture 풀이 코드

C | C++ | Java | Python

영어(English)


문제 해설

콜라츠 추측을 구현해봅시다. 입력받은 수가 콜라츠 추측으로 1이 될 때까지 과정을 순서대로 출력하면 됩니다. 수가 짝수일 경우 반으로 나누고, 홀수일 경우 3을 곱한 후 1을 더하는 과정을 반복합니다.

풀이

간단한 while문으로 구현가능합니다. 입력은 자연수로 한정되어 있으므로 언젠가는 1이 되어 탈출할 수 있습니다.

코드

#include <stdio.h>

int main(){
    int n = 0;
    scanf("%d", &n);
    printf("%d ", n);
    
    while(n != 1){
        if(n%2 == 0){
            n = n/2;
            printf("%d ", n);
        }
        else{
            n = n*3+1;
            printf("%d ", n);
        }
    }
    return 0;
}
#include <iostream>
using namespace std;

int main(){
    int n = 0;
    cin>>n;
    cout<<n<<" ";
    
    while(n != 1){
        if(n%2 == 0){
            n = n/2;
            cout<<n<<" ";
        }
        else{
            n = n*3+1;
            cout<<n<<" ";
        }
    }
    return 0;
}
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.printf(n+" ");
        
        while(n != 1){
            if(n%2 == 0){
                n = n/2;
                System.out.printf(n+" ");
            }
            else{
                n = n*3+1;
                System.out.printf(n+" ");
            }
        }
    }
}
n = int(input())
print(n, end=" ")

while n != 1:
    if n%2 == 0:
        n = n//2
        print(n, end=" ")
    else:
        n = n*3+1
        print(n, end=" ")

문제 출처

https://www.acmicpc.net/problem/13236

반응형

+ Recent posts