콜라츠 추측

sky·2022년 6월 26일

Programmers Lv.1(Python)

목록 보기
14/28
post-thumbnail

문제 설명

문제

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 미만인 정수입니다.

입출력

  • 입출력 예 #1
    문제의 설명과 같습니다.
  • 입출력 예 #2
    16 → 8 → 4 → 2 → 1 이 되어 총 4번 만에 1이 됩니다.
  • 입출력 예 #3
    626331은 500번을 시도해도 1이 되지 못하므로 -1을 리턴해야 합니다.

풀이 방법

  1. 1이 될 때까지 반복해야 하므로 반복문으로 count가 1이 될 때까지 반복하게 한다. 이때, 조건문으로 짝/홀수를 구분해서 코드를 작성한다.
  2. 반복문 내에서 count가 500번이 되면 -1을 리턴한다.
  3. 반복문 외에서 n = 1일 때 0을 리턴한다.

Solution

Python

def solution(num):
    cnt = 0
    if num == 1: 
        return 0
    new_n = num
    while 1:
        cnt += 1
        #new_n = new_n / 2 //이게 문제였다.
        if new_n % 2 == 0:
            new_n = new_n / 2
        else:
            new_n = (new_n * 3) + 1
    
        if cnt == 500:
            return -1
        if new_n == 1:
            break
    return cnt

무한 루프 안 돌리고 'while != 1:'해줘도 된다.

Total Time

  • 2022-06-24 | 19:30 - 20:30 이런 거 제일 못해.. 원콤을 낸 적이 없다.
  • 2022-06-26 | 23:00 - 23:17 성공!!

Review
BOJ 더하기 사이클 문제와 비슷한 문제였는데, 오늘 그 문제를 성공해서 콜라츠 추측도 성공했다!! 이 맛에 코딩한다.

profile
개발자가 되고 싶은 1人

0개의 댓글