[백준] 구현 3943번: 헤일스톤 수열

C.K. ·2022년 6월 12일
0

baekjoon

목록 보기
15/67

문제

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

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으로 시작하는 헤일스톤 수열에서 가장 큰 값을 출력한다.

Approach

  • 각 test case마다 n을 입력받고 짝/홀에 맞춰 n의 값을 업데이트 해준다. n이 1이 될때까지 max를 계속 업데이트 시킴으로써 최댓값을 찾는다.

Source Code

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    ios_base :: sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int T; // test case 입력 받기 
    cin >> T;
    
    for (int i = 0; i < T; i++) // 각 테스트케이스 마다
    {
        int n; // 수열의 시작 n 입력받기 
        cin >> n;
        
        int max = 1;
        while (n != 1) // n이 1이 될 때까지
        {
            if (n > max) // 최댓값 업데이트 
                max = n;
            if (n % 2 == 0) // 짝수일 경우 하단의 연산 수행
            {
                n /= 2;
            }
            else // 홀수일 경우 하단의 연산 수행
            {
                n = n * 3 + 1;
            }

        }
        
        cout << max << '\n'; // 최댓값 출력 
    }
    
    
    return 0;
}
profile
1일 1알고리즘

0개의 댓글