본문 바로가기

코딩 테스트/Project Euler @ kr

14) 백만 이하로 시작하는 우박수 중 가장 긴 과정을 거치는 것은?

반응형

http://euler.synap.co.kr/forum_list.php?p=14&pg=14


Skillist 코드---------------------------------------------------------------------------------


public static void main(String[] args){

long[] array = new long[500001];

for(int i=0;i<500001;i++){

array[i] = 0;

}

long max = 0;

long num = 0;

for(int n = 500000; n<=1000000; n++){

long number = n;

long temp = 0;

while(number != 1){

if(number >= 500000 && number <1000000){

if(array[(int) (number-500000)]==0){

if(number%2 == 0){ //짝수

number = number / 2;

}else{ //홀수

number = (number*3) +1;

}

temp+=1;

}else{

temp += array[(int) (number-500000)];

number = 1;

}

}else{

if(number%2 == 0){ //짝수

number = number / 2;

}else{ //홀수

number = (number*3) +1;

}

temp+=1;

}

}

array[n-500000] = temp;

if(temp>num){

num = temp;

max = n;

}

}

System.out.println(max + " -> " + num);

}


다시 공부------------------------------

public static void main(String[] arg){

int array[] = new int[1000001];

int max = 1;

for(int i=2;i<1000000;i++){

long temp = i;

int num = 0;

//System.out.println(i);

while(temp>1){

if(temp%2==0){    //짝수

temp /=2;

}else{                //홀수

temp = 3*temp +1;

}

num+=1;

try{

if(array[(int)temp]!=0){

num += array[(int)temp];

temp=1;

}

}catch(Exception e){

}

}

array[i] = num;

if(array[max]<num){

max = i;

}

}

System.out.println(max + " / " + array[max]);

}

반응형