본문 바로가기
*Algorithm/Programmers_Level1

[programmers] 프로그래머스 Level1 콜라츠 추측(파이썬 Python)

by codinguser 2020. 9. 5.

프로그래머스
(주)그렙

[programmers] 프로그래머스 Level1 콜라츠 추측

(파이썬 Python)

 

* 문제출처 : 프로그래머스 코딩 테스트 연습, 알고리즘 문제
* 소스 코드 및 정리한 내용의 저작권은 글쓴이에게 있습니다.

 

 

 

프로그래머스 Level1 콜라츠 추측


1) 문제

 

프로그래머스 콜라츠 추측

 

코딩테스트 연습 - 콜라츠 추측

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

programmers.co.kr

 


2) 풀이 과정

 

1. num 이 1이 되면 그때의 카운팅(answer)을 return 한다를 초기 조건 설정(단, 반복 세팅 500 일 때 이 외에는 -1 리턴)

 

2. 1이 아닐 때를 기준으로 num % 2 == 0 이면 다음과 같은 num을 반환과 동시에 카운팅

 

3. 1이 아닐 때를 기준으로 num % 2 == 0 이 아니면 다음과 같은 num을 반환과 동시에 카운팅


3) 코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def solution(num):
    answer = 0
    
    for i in range(500):
 
        if(num == 1):
            return answer
 
        else:
            if(num % 2 == 0):
                num = num // 2
                answer += 1
            else:
                num = num * 3 + 1
                answer += 1
                
    return -1
cs

 

 

4) 정리 노트

 

하.. 상당히 오래 걸린 문제였다. 처음 num == 1 일 때를 제외하고 다음과 같은 식을 썼었다. 왜 틀렸는지를 한참 고민하고 나서야 알게 됐다.

 

짝수와 홀수를 먼저 받게 된다면 첫 번째로 홀수에서 1을 받게 되면, elif 2번째에 걸려버리게 된다.

즉 짝수, 홀수, 1일 때의 경우에 있어서 num이 1로 들어오게 되면 홀수에 카운팅이 돼버려서 틀린 답안이 돼버렸다. num == 1이라는 예외를 생각하지 못했던 게 컸다.

 

부끄러운 코드다..


 

< < 처음 제출한 틀린 답안 > >

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def solution(num):
    answer = 0
    
    for i in range(500):
        if(num%2==0):
            num = num // 2
            answer += 1
            
        elif(num % 2 != 0):
            num = num * 3 + 1
            answer += 1
            
        elif(num==1):
            return answer
        
    return -1
cs

 

창피한_결과
창피한 결과


* 순서를 잘 주고 조건을 잘 찾아야 한다는 것을 느꼈다.

 

*  항상 키보드에 손이 가기 전에 종이에다가 적어 문제를 풀어 나가 볼 것.

: 지금 까지는 운 좋게 맞았지만, 문제가 길어질수록 적어 나가는 것이 중요하다고 생각한다.


댓글