코딩테스트 - 콜라츠 추측, Collatz, C언어

728x90
반응형

https://namu.wiki/w/%EC%BD%9C%EB%9D%BC%EC%B8%A0%20%EC%B6%94%EC%B8%A1

 

콜라츠 추측 - 나무위키

만약 이 추측이 거짓이라면, 1로 가지 않는 반례가 존재한다는 것을 의미한다. 수학자들은 이런 대표적인 반례에 대해서 자기 자신으로 순환하는 루프가 존재할 것으로 예상한다[10]. 예를들어

namu.wiki

 

 

 

주어진 수가 1이 될때까지 반복해서 작업을 한다. 

 

1. 주어진수가 짝수면 2로 나눈다.

2. 주어진수가 홀수면 3을 곱하고 1을 더한다.

3. 결과로 나온수에 같은 작업(1번 or 2번)을 1이 될때까지 반복한다. 

 

 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(long num) {

if(num == 1)  {
        return 0;
    }
    
    for(int i = 0; i < 500; i++)    {
        if(num % 2 == 0)  {
            num /= 2;
        }
        else {
            num = (num*3)+1;
        }
        printf("%d ", num);
        if(num == 1)  {
            return i+1;
        }
    }
    return -1;
}

 

조건 1. 주어진 수가 1이면 0을 리턴

조건 2. 500회 이상 시도해도 1이 나오지 않으면 -1을 리턴.

 


num = (num % 2 == 0) ? (num / 2) : (3 * num + 1);

가운데 if ~ else 문을 위 코드로 대체하면 간결해짐.

 

- 끝 -

728x90
반응형