250x250
Link
λ‚˜μ˜ GitHub Contribution κ·Έλž˜ν”„
Loading data ...
Notice
Recent Posts
Recent Comments
관리 메뉴

Data Science LAB

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level 1 (콜라츠 μΆ”μΈ‘) λ³Έλ¬Έ

πŸ“ Coding Test/Programmers

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level 1 (콜라츠 μΆ”μΈ‘)

γ…… γ…œ γ…” γ…‡ 2022. 11. 10. 15:24
728x90

1. 문제 μ„€λͺ…

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을 λ°˜ν™˜ν•΄ μ£Όμ„Έμš”.

 

 

 

2. μ œν•œ 쑰건

  • μž…λ ₯된 μˆ˜, num은 1 μ΄μƒ 8,000,000 λ―Έλ§ŒμΈ μ •μˆ˜μž…λ‹ˆλ‹€.

 

 

 

 

3. λ‚΄ 풀이

def solution(num):
    answer = 0
    while num != 1 and answer < 500:
        if num %2 == 0:
            num = num/2
            answer += 1
        else:
            num = num*3 + 1
            answer += 1
    if answer == 500: 
        answer=-1
    return answer

 

 

 

 

 

4. λ‹€λ₯Έ μ‚¬λžŒ 풀이

def collatz(num):
    for i in range(500):
        num = num / 2 if num % 2 == 0 else num*3 + 1
        if num == 1:
            return i + 1
    return -1
728x90
Comments