코딩 테스트/프로그래머스

[Python] 프로그래머스 콜라츠 수열 만들기

위시리 2024. 10. 1. 15:35

 

문제 분석

  • 모든 자연수 x에 대해
  • x가 짝수이면 x = x/2
  • x가 홀수이면 x = 3*x+1
  • 계속 하면 x=1이 되는가?

 

  • 위 과정을 거쳐간 모든 수를 기록한 수열 : 콜라츠 수
  • 1000 보다 작은 수는 언젠가 1에 도달한다
  • 1000보다 작거나 같은 양의 정수 n이 주어질 때, 초기값이 n인 콜라츠 수열을 return하는 함수 sol

 

코드 설계

  • 재귀
  • 종료조건 : x=1
  • 중간 계산값 answer.append(x)

 

정답 코드

def solution(n):
    if n == 1 :
        answer.append(n)
        return answer
    else :
        answer.append(n)
        if n % 2 == 0 :
            solution(n//2)
        else :
            solution(n*3+1)
    return answer

answer = []

 

다른 사람 코드

def solution(n):
    answer = [n]
    while n > 1:
        if n % 2 == 0:
            n //= 2
        else:
            n = 3 * n + 1
        answer.append(n)
    return answer