Algorithm/Baekjoon Online Judge
[다이나믹 프로그래밍] BOJ_3943 헤일스톤 수열
best
2017. 4. 20. 17:15
문제
헤일스톤 수열은 다음과 같이 정의 한다.
- n이 짝수라면, 2로 나눈다.
- n이 홀수라면, 3을 곱한 뒤 1로 더한다.
헤일스톤 추측은 임의의 양의 정수 n으로 수열을 시작한다면, 항상 4, 2, 1, 4, 2, 1,...로 끝난다는 추측이다. 이 문제에서는 1이 나오면 수열이 끝난 것으로 처리한다.
n이 주어졌을 때, 이 수열에서 가장 큰 값을 찾아 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 100,000)가 주어진다. 다음 줄부터 T개의 줄에는 헤일스톤 수열의 시작값 n이 주어진다. (1 ≤ n ≤ 100,000)
출력
각각의 테스트 케이스에 대해서, n으로 시작하는 헤일스톤 수열에서 가장 큰 값을 출력한다.
예제 입력
4 1 3 9999 100000
예제 출력
1 16 101248 100000
코드
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package dp; import java.util.Scanner; /** * https://www.acmicpc.net/problem/3943 * 헤일스톤 수열 * @author minjung * */ public class baekjoon_3943 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int T = sc.nextInt(); for ( int i = 0; i < T; i++ ){ int hailstone = sc.nextInt(); int max = 0; max = hailstone; while( hailstone != 1 ){ if ( max <= hailstone ){ max = hailstone; } if ( hailstone % 2 == 0 ){ hailstone = hailstone/2; } else if ( hailstone % 2 != 0 && hailstone != 1 ){ hailstone = hailstone*3 + 1; } } System.out.println(max); } } } | cs |