codekata

[프로그래머스] #23 콜라츠 추측

kinggoddino 2024. 7. 19.

▶ 문제

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면 모든 수를 1로 만들 수 있다는 추측이다. 작업은 다음과 같다.

 

1-1. 입력된 수가 짝수라면 2로 나눈다.

1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더한다.

2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복한다.

 

예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1이 되어 총 8번 만에 1이 된다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수 solution 완성하기.

 

단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 -1을 반환하기.

 

▶ 제한사항

입력된 num은 1 이상 8,000,000 미만인 정수

 

▶ 풀이

def solution(num):
    count = 0
    if num == 1:                # 처음 들어온 num이 1일 때
        return 0                # 0 반환
    while num != 1:             # num이 1이 될 때까지 무한루프
        if num % 2 == 0:        # num이 짝수면
            num = num / 2       # 나누기2 하고,
            count += 1          # count 한번 해줌
        else:                   # num이 홀수면
            num = num * 3 + 1   # 곱하기3 더하기1 하고,
            count += 1          # count 한번 해줌
    if count <= 500:            # 최종 count가 500이하면
        return count            # count 반환
    else:                       # 최종 count가 500 초과면
        return -1               # -1 반환

오예 통과!

 

첨에 재귀함수 써볼려고 했는데 함수가 호출될 때마다 count 가 계속 0으로 초기화 돼버려서 못썼다ㅜ