코딩테스트 \파이썬\자바/CODE UP

[코드업] 1928-1929 : (재귀함수) 우박수 (3n+1) (basic/reverse) 파이썬

익명의 신디 2020. 3. 6. 23:53

[코드업] 1928-1929 : (재귀함수) 우박수 (3n+1) (basic/reverse) 파이썬

문제출처

https://codeup.kr/problem.php?id=1928

https://codeup.kr/problem.php?id=1929

1928 : (재귀함수) 우박수 (3n+1) (basic)

콜라츠의 추측, 3n+13n+1 문제, 우박수 문제라고 불리는 이 문제는 다음과 같다.

1, 어떤 자연수 nn이 입력되면,

2. nn이 홀수이면 3n+13n+1을 하고,

3. nn이 짝수이면 n2n2를 한다.

4. 이 nn 11이 될때까지 2 32 3과정을 반복한다.

예를 들어 55 55  1616  88  44  22  11 이 된다.

이 처럼 어떤 자연수 nn이 입력되면 위 알고리즘에 의해 11이 되는 과정을 모두 출력하시오.

이 문제는 반복문 for, while 등을 이용하여 풀수 없습니다.

금지 키워드 : for while goto

입력

자연수 nn이 입력된다.(1<=n<=10,000,000)(1<=n<=10,000,000)

단, 3n+13n+1이 되는 과정에서 intint범위를 넘는 수는 입력으로 주어지지 않는다.

출력

3n+13n+1의 과정을 출력한다.

 

<PASS>

1
2
3
4
5
6
7
8
9
10
11
12
13
# 우박수 3n+1
def Collatz(n):
    print(n)
    if n == 1:
        return 1
    elif n%2# 홀수
        Collatz(3*n+1)
    else# 짝수
        Collatz(n//2)
= int(input())
Collatz(x)
 
 

 


1929 : (재귀함수) 우박수 (3n+1) (reverse)

콜라츠의 추측, 3n+13n+1 문제, 우박수 문제라고 불리는 이 문제는 다음과 같다.

1, 어떤 자연수 nn이 입력되면,

2. nn이 홀수이면 3n+13n+1을 하고,

3. nn이 짝수이면 n2n2를 한다.

4. 이 nn 11이 될때까지 2 32 3과정을 반복한다.

예를 들어 55 55  1616  88  44  22  11 이 된다.

그런데 이번에는 이 순서의 역순을 출력하고자 한다.

즉, 11 22 44 88 1616 55 가 출력되어야 한다.

이 처럼 어떤 자연수 nn이 입력되면 위 알고리즘에 의해 11이 되는 과정을 모두 출력하시오.

이 문제는 반복문 for, while 등을 이용하여 풀수 없습니다.

금지 키워드 : for while goto

입력

자연수 nn이 입력된다.(1<=n<=10,000,000)(1<=n<=10,000,000)

출력

3n+13n+1의 과정을 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
# 우박수 3n+1 
 
def Collatz(n):
    if n == 1:
        return print(n)
    elif n%2# 홀수
        Collatz(3*n+1)
    else# 짝수
        Collatz(n//2)
    return print(n)
= int(input())
Collatz(x)