λ¬Έμ μ€λͺ
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μ μμ±ν΄ μ£ΌμΈμ. λ¨, μμ μ 500λ²μ λ°λ³΅ν΄λ 1μ΄ λμ§ μλλ€λ©΄ –1μ λ°νν΄ μ£ΌμΈμ.
μ ν 쑰건
- μ λ ₯λ μ, numμ 1 μ΄μ 8000000 λ―Έλ§μΈ μ μμ λλ€.
μ μΆλ ₯ μ
n | result |
6 | 8 |
16 | 4 |
626331 | -1 |
λ΄ λ¬Έμ νμ΄
func solution1(_ num:Int) -> Int {
var repeatTime = 0 // μ½λΌμΈ μΆμΈ‘ λ°λ³΅ νμ μ μ₯ λ³μ
var n = num
// nμ΄ 1μ΄ μλ λ, μ§μλΌλ©΄ 2λ‘ λλκ³ νμλΌλ©΄ 3μ κ³±νκ³ 1μ λνλ whileλ¬Έ
while n != 1 {
// μ§μμΌ λ
if n % 2 == 0 {
n = n / 2
repeatTime += 1
}
// νμμΌ λ
else {
n = n * 3 + 1
repeatTime += 1
}
// λμ λ λ°λ³΅ νμκ° 500λ²μ΄ λμ κ²½μ°, λ°λ³΅ νμλ₯Ό -1λ‘ μ΄κΈ°ν ν νμΆ
if repeatTime == 500 {
repeatTime = -1
break
}
}
// μ½λΌμΈ μΆμΈ‘ μ±κ³΅ μ λ°λ³΅ νμ μΆλ ₯, 500λ² μ΄μ λ°λ³΅ μ -1 리ν΄
return repeatTime
}
- μ§μμΈμ§ μλμ§ νλ³ νμ¬ μ½λΌμΈ μΆμΈ‘ κ³μ° μ μ©, λ°λ³΅ νμκ° 500λ² λμ κ²½μ° whileλ¬Έμ νμΆνλ€.
π‘ νΌλλ°±
- κ±°μ μ§ / ν νλ³ λ¬Έμ λ λ€λ¦ μμλ€κ³ μκ°νκ³ , μ¬μμ κΈλ°© νμλ€.
π [ μΆκ° ] 1μ£ΌμΌ ν λ€μ νμ΄λ³΄κΈ°
func solution(_ num:Int) -> Int {
var n = num
var count = 0
while n > 1 {
n%2==0 ? (n=n/2) : (n=n*3+1)
count += 1
if count == 500 { count = -1; break }
}
return count
}
- 첫 λ²μ§Έ νμ΄μ λ‘μ§μ κ°μλ°, μΌν μ°μ°μ μ¬μ©νμ¬ ν¨μ¬ κ°κ²°ν΄μ‘λ€.
λ¬Έμ
λκΈ