반응형

문제

https://codeup.kr/problem.php?id=3733 

 

우박수 길이 (3n+1) (large)

두 자연수 a, b가 공백으로 분리되어 입력된다. ( 1 <= a <= b <= 10,000,000 )

codeup.kr

 

코드

 

 

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

int memo[10000001] = {};

// x의 우박수 리턴해줌
long long int f(long long int x, long long int len){

    if(x < 10000001 && memo[x] != 0)
        return len + memo[x];


    if(x % 2 == 1)
        x = 3*x+1;
    else
        x /= 2;

    return f(x, len+1);

}

int main(){

    memo[1] = 1;

    long long int result;
    long long int maxNum = -1;
    long long int maxResult = -1;

    int a,b;
    scanf("%d %d", &a, &b);

    for(int i = a ; i <= b; ++i){
        memo[i] = f(i, 0);
        if(maxResult < memo[i]){
            maxResult = memo[i];
            maxNum = i;
        }
    }

    printf("%lld %lld", maxNum, maxResult);

    return 0;
}
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기