알고리즘,손코딩 문제

프로젝트 오일러 문제 14 : 백만(1,000,000) 이하의 수로 시작했을 때 1까지 도달하는데 가장 긴 과정을 거치는 숫자는 얼마입니까?

알통몬_ 2017. 3. 11. 20:18
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

양의 정수 n에 대하여, 다음과 같은 계산 과정을 반복하기로 합니다.

n → n / 2 (n이 짝수일 때)

n → 3 n + 1 (n이 홀수일 때)

13에 대하여 위의 규칙을 적용해보면 아래처럼 10번의 과정을 통해 1이 됩니다.

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

아직 증명은 되지 않았지만, 이런 과정을 거치면 어떤 수로 시작해도 

마지막에는 1로 끝나리라 생각됩니다. 

(역주: 이것은 콜라츠 추측 Collatz Conjecture이라고 하며, 

이런 수들을 우박수 hailstone sequence라 부르기도 합니다)

그러면, 백만(1,000,000) 이하의 수로 시작했을 때 1까지 도달하는데 

가장 긴 과정을 거치는 숫자는 얼마입니까?

* 계산 과정 도중에는 숫자가 백만을 넘어가도 괜찮습니다.


public class Question14 {


public static void main(String[] args) {

int startNum = 2;

long hailNum = 0, hailNum2 = 0,maxNum = 0;

int count = 0, count2 = 0, max = 0;


for (int i = 11; i < 999999; i++) {

hailNum = startNum + i;

count = 0;

hailNum2 = hailNum;

while (hailNum > 1) {

if (hailNum % 2 == 0) {

hailNum /= 2;

count++;

} else {

hailNum = (hailNum * 3) + 1;

count++;

}

count2 = count;

}


if(max < count2){

max = count2;

maxNum = hailNum2;

}

}

System.out.println(maxNum);

}

 

}

반응형