[프로그래머스] LEVEL1 - 콜라츠 추측 (Python)
https://programmers.co.kr/learn/courses/30/lessons/12943
코딩테스트 연습 - 콜라츠 추측 | 프로그래머스
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이 됩니다. 위
programmers.co.kr
문제설명
1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.
- 입력된 수가 짝수라면 2로 나눕니다.
입력된 수가 홀수라면 3을 곱하고 1을 더합니다. - 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.
예를 들어, 입력된 수가 6이라면 6→3→10→5→16→8→4→2→1 이 되어 총 8번 만에 1이 됩니다.
위 작업을 몇 번이나 반복해야하는지 반환하는 함수, solution을 완성해 주세요.
단, 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요.
제한조건
- 입력된 수, num은 1 이상 8000000 미만인 정수입니다.
입출력 예
n | result |
6 | 8 |
16 | 4 |
626331 | -1 |
answer
def solution(num):
answer = 0 #작업횟수 초기화
while True: #수마다 몇회 반복해야 할지 모르므로 무한루프
if num == 1: #입력받은 수가 1일경우 answer를 리턴
return answer
if answer == 500: #작업 횟수가 500이 되면 -1을 리턴
return -1
if num % 2 == 0: #입력받은 수가 짝수 일경우 2로 나눈값을 변수에 담는다.
num = num / 2
elif num % 2 == 1: #입력받은 수가 홀수 일경우 3을 곱하고 1을 더해준다.
num = num * 3 + 1
answer += 1 #위의 작업을 마치고 작업횟수를 1더해준다
무한루프안에서 answer += 1이 마지막에 있는 이유는 처음 입력받은 수가 1일때 작업횟수가 0이 돼야 하기 때문에 마지막에 두었습니다.
다른 방른방법이 떠올지 않아 문제설명 그대로 직관적으로 일일히 적어 썻는데 다풀고 다른사람 풀이를 보니 생각지도 못한 신기한 방법들이 있네요 심지어 그 방법들을 이해 못하는 것도 있어서 더 열심히 공부해야겠습니다 ㅠㅠ