๐Ÿ“ฆ Chango/๐Ÿซ First Solve at School

[BOJ B3][C++] ๋ฐฑ์ค€ 14920๋ฒˆ: 3n+1 ์ˆ˜์—ด

์„ ๋‹ฌ 2022. 12. 28. 13:59
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/14920

 

14920๋ฒˆ: 3n+1 ์ˆ˜์—ด

๋‹ค์Œ์˜ ์ ํ™”์‹์— ์˜ํ•ด ์ •ํ•ด์ง€๋Š” ์ˆ˜์—ด C(n)์„ ์ƒ๊ฐํ•˜์ž: C(n+1) = C(n)/2 (C(n)์ด ์ง์ˆ˜์ผ ๋•Œ) = 3*C(n)+1 (C(n)์ด ํ™€์ˆ˜์ผ ๋•Œ) ์ดˆํ•ญ C(1)์ด ์ž์—ฐ์ˆ˜๋กœ ์ฃผ์–ด์ง€๋ฉด, ์ด ์ ํ™”์‹์€ ์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ์ˆ˜์—ด์„ ์ •ํ•œ๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ

๋‹ค์Œ์˜ ์ ํ™”์‹์— ์˜ํ•ด ์ •ํ•ด์ง€๋Š” ์ˆ˜์—ด C(n)์„ ์ƒ๊ฐํ•˜์ž:

     C(n+1) = C(n)/2     (C(n)์ด ์ง์ˆ˜์ผ ๋•Œ)
            = 3*C(n)+1   (C(n)์ด ํ™€์ˆ˜์ผ ๋•Œ)

์ดˆํ•ญ C(1)์ด ์ž์—ฐ์ˆ˜๋กœ ์ฃผ์–ด์ง€๋ฉด, ์ด ์ ํ™”์‹์€ ์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ์ˆ˜์—ด์„ ์ •ํ•œ๋‹ค.  ์˜ˆ๋ฅผ ๋“ค์–ด, C(1)=26์ด๋ฉด, ๋‹ค์Œ์˜ ์ˆ˜์—ด์ด ๋œ๋‹ค.

26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1, 4, 2, 1, ...

์ด ๊ฒฝ์šฐ, ์ˆ˜์—ด์˜ ๋’ท๋ถ€๋ถ„์€ 4, 2, 1 ์ด ๋์—†์ด ๋ฐ˜๋ณต๋œ๋‹ค. ์‹ค์ œ๋กœ C(1)์ด 5×260๋ณด๋‹ค ์ž‘์€ ์ž์—ฐ์ˆ˜์ธ ๋ชจ๋“  ์ˆ˜์—ด์€ ์–ธ์  ๊ฐ€๋Š” 4, 2, 1๋กœ ๋๋‚˜๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด ์•Œ๋ ค์ ธ ์žˆ๋‹ค.

์ฃผ์–ด์ง„ ์ž…๋ ฅ C(1)์— ๋Œ€ํ•˜์—ฌ C(n)์ด ์ฒ˜์Œ์œผ๋กœ 1์ด ๋˜๋Š” n์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

์ž…๋ ฅ

C(1); 1 ≤ C(1) ≤ 100000

์ถœ๋ ฅ

C(n)์ด ์ฒ˜์Œ์œผ๋กœ 1์ด ๋˜๋Š” n

 

ํ’€์ด

// Authored by : seondal
// Co-authored by : -

// #include <bits/stdc++.h>
#include <iostream>
#include <vector>

using namespace std;

int solution(int c1) {
    int prev = c1, next;
    for(int i=1; true; i++) {
        if(prev == 1)
            return i;
        
        if(prev%2 == 0){
            next = prev/2;
        } else {
            next = 3*prev + 1;
        }
        
        prev = next;
    }
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    
    int c1;
    cin >> c1;
        
    cout << solution(c1);
    
    return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•