🧠 콜라츠 μΆ”μΈ‘

문제

1937λ…„ Collatzλž€ μ‚¬λžŒμ— μ˜ν•΄ 제기된 이 좔츑은, 주어진 μˆ˜κ°€ 1이 λ λ•ŒκΉŒμ§€ λ‹€μŒ μž‘μ—…μ„ λ°˜λ³΅ν•˜λ©΄, λͺ¨λ“  수λ₯Ό 1둜 λ§Œλ“€ 수 μžˆλ‹€λŠ” 좔츑이닀. μž‘μ—…μ€ λ‹€μŒκ³Ό κ°™λ‹€. 1-1. μž…λ ₯된 μˆ˜κ°€ 짝수라면 2둜 λ‚˜λˆˆλ‹€. 1-2. μž…λ ₯된 μˆ˜κ°€ ν™€μˆ˜λΌλ©΄ 3을 κ³±ν•˜κ³  1을 λ”ν•œλ‹€. 2-1. 결과둜 λ‚˜μ˜¨ μˆ˜μ— 같은 μž‘μ—…μ„ 1이 될 λ•ŒκΉŒμ§€ λ°˜λ³΅ν•œλ‹€. 예λ₯Ό λ“€μ–΄, μž…λ ₯된 μˆ˜κ°€ 6이라면 6β†’3β†’10β†’5β†’16β†’8β†’4β†’2β†’1 이 λ˜μ–΄ 총 8번 λ§Œμ— 1이 λœλ‹€. μœ„ μž‘μ—…μ„ λͺ‡ λ²ˆμ΄λ‚˜ λ°˜λ³΅ν•΄μ•Όν•˜λŠ”μ§€ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜λΌ. 단, μž‘μ—…μ„ 500λ²ˆμ„ λ°˜λ³΅ν•΄λ„ 1이 λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄ –1을 λ°˜ν™˜ν•˜λΌ.

  • μž…λ ₯된 수, num은 1 이상 8000000 미만인 μ •μˆ˜μ΄λ‹€.

λ‚˜μ˜ 풀이

def collatz(num):
    if num == 1:
        return 0
    for i in range(1, 501):
        num = num / 2 if not num % 2 else num * 3 + 1
        if num == 1:
            return i
    return -1

이번 λ¬Έμ œλŠ” μˆ˜μ›”ν•˜κ²Œ ν’€μ–΄λ‚Ό 수 μžˆμ—ˆλ‹€. μ£Όμ˜ν•΄μ•Όν•  점이 μžˆλ‹€λ©΄ μž…λ ₯값이 1인 κ²½μš°λŠ” μž‘μ—…μ„ λ“€μ–΄κ°ˆ ν•„μš”κ°€ μ—†μœΌλ―€λ‘œ 0으둜 λ°”λ‘œ 쳐내야 ν•œλ‹€λŠ” 점이닀.

References


Written by@ugaemi
Record things I want to remember

🐱 GitHubπŸ“š Reading Space