티스토리 뷰

문제

헤일스톤 수열은 다음과 같이 정의 한다.

- 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


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함