Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 쉽게 배우는 운영체제 풀이
- 쉽게 배우는 운영체제 연습문제
- OS 그래픽 처리
- os 만들기
- Project Euler Problem
- 건담
- 운영체제 제작
- 운영체제
- hg
- 프라모델
- Gundam
- 쉽게 배우는 운영체제
- OS강의
- 운영체제 만들기
- 건프라
- OS 강의
- 건담 프라모델
- project euler
- rg
- 맛집 추천
- OS 제작
- 쉽게 배우는 운영체제 솔루션
- 맛집
- OS
- 운영체제 문제 풀이
- 30일
- OS 구조와 원리
- 건담 엑스포
- 운영체제 정리
- Project Euler 해답
Archives
- Today
- Total
밤색모자이크의 개발이야기
Project Euler Problem 14 : 백만 이하로 시작하는 우박수 중 가장 긴 과정을 거치는 것은? 본문
Algorithm/Project Euler
Project Euler Problem 14 : 백만 이하로 시작하는 우박수 중 가장 긴 과정을 거치는 것은?
밤색모자이크 2017. 6. 19. 10:48Project Euler 문제를 해답을 포스팅합니다.
※ 주의 : 최적화는 할 수 있는 만큼했습니다. 따라서 속도면에서는 많이 부족합니다.
문제를 푸는데 목표를 두었고 또한 TDD를 최대한 활용하였습니다.
몇가지 문제의 경우 TDD를 안한 경우도 있습니다.
혹시, 최적화 또는 속도 증가에 대한 부분을 지적해주실 분은 너무나도 감사합니다.
Project Euler Problem 14
양의 정수 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까지 도달하는데 가장 긴 과정을 거치는 숫자는 얼마입니까?
참고: 계산 과정 도중에는 숫자가 백만을 넘어가도 괜찮습니다.
딱히 문제가 별로 없는 알고리즘이었습니다. 그냥 그대로 쓰면될거 같아서 별도의 테스트도 작성하지 않았습니다.
Source Code
Main Class Code
public class Main { public static void main(String [] args) { long currentNum = 0; long max = 0; long result = 0; long count = 0; long calNum = 0; while(currentNum <= 1000000) { calNum = ++currentNum; while(true) { if( (calNum%2) == 0) calNum /= 2; else calNum = 3 * calNum + 1; count++; if(calNum == 1) break; }//end of while infinity if(max < count) { max = count; result = currentNum; } count = 0; } System.out.println( result ); } }
'Algorithm > Project Euler' 카테고리의 다른 글
Project Euler Problem 16 : 2^1000의 각 자리수를 모두 더하면? (0) | 2017.06.19 |
---|---|
Project Euler Problem 15 : 20×20 격자의 좌상단에서 우하단으로 가는 경로의 수 (0) | 2017.06.19 |
Project Euler Problem 13 : 50자리 숫자 100개를 더한 값의 첫 10자리 구하기 (0) | 2017.06.19 |
Project Euler Problem 12 : 500개 이상의 약수를 갖는 가장 작은 삼각수는? (0) | 2017.06.19 |
Project Euler Problem 11 : 20×20 격자에서 연속된 네 숫자의 곱 중 최대값 (0) | 2017.06.19 |
Comments