개발자일걸요..?

14950번 3n+1수열 본문

알고리즘코딩/Baekjoon Online Judge

14950번 3n+1수열

Re_A 2021. 11. 4. 22:52
728x90
반응형

링크 : 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

예제 입력 1

26

예제 출력 1 

11

예제 입력 2

7

예제 출력 2 

17

 

 


 

시뮬레이션 알고리즘 이용

수열의 요소가 1일 될때까지 공식 반복하면서 체크

 

입력예제를 이용한 과정

입력 : 26

C(1) 26 C(7) 16
C(2) 13 C(8) 8
C(3) 40 C(9) 4
C(4) 20 C(10) 2
C(5) 10 C(11) 1
C(6) 5    

출력 : 11

 


 

작성한 코드

c = int(input())
progression = []
count = 1
progression.append(c)
while c !=1:
    if c%2==0:
        c=c/2
    else:
        c=3*c+1
    progression.append(c)
    count+=1
print(count)
반응형

'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글

1260번 DFS와 BFS  (0) 2021.11.06
1759번 암호 만들기  (0) 2021.11.05
13698번 Hawk eyes  (0) 2021.11.04
4084번 Viva la Diferencia  (0) 2021.11.04
10812번 바구니 순서 바꾸기  (0) 2021.11.04
Comments