[λ°±μ€/python] 4673λ² : μ ν λλ²
λ¬Έμ
μ ν λλ²λ 1949λ μΈλ μνμ D.R. Kaprekarκ° μ΄λ¦ λΆμλ€. μμ μ μ nμ λν΄μ d(n)μ nκ³Ό nμ κ° μ리μλ₯Ό λνλ ν¨μλΌκ³ μ μνμ. μλ₯Ό λ€μ΄, d(75) = 75+7+5 = 87μ΄λ€.
μμ μ μ nμ΄ μ£Όμ΄μ‘μ λ, μ΄ μλ₯Ό μμν΄μ n, d(n), d(d(n)), d(d(d(n))), ...κ³Ό κ°μ 무ν μμ΄μ λ§λ€ μ μλ€.
μλ₯Ό λ€μ΄, 33μΌλ‘ μμνλ€λ©΄ λ€μ μλ 33 + 3 + 3 = 39μ΄κ³ , κ·Έ λ€μ μλ 39 + 3 + 9 = 51, λ€μ μλ 51 + 5 + 1 = 57μ΄λ€. μ΄λ°μμΌλ‘ λ€μκ³Ό κ°μ μμ΄μ λ§λ€ μ μλ€.
33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...
nμ d(n)μ μμ±μλΌκ³ νλ€. μμ μμ΄μμ 33μ 39μ μμ±μμ΄κ³ , 39λ 51μ μμ±μ, 51μ 57μ μμ±μμ΄λ€. μμ±μκ° ν κ°λ³΄λ€ λ§μ κ²½μ°λ μλ€. μλ₯Ό λ€μ΄, 101μ μμ±μκ° 2κ°(91κ³Ό 100) μλ€.
μμ±μκ° μλ μ«μλ₯Ό μ ν λλ²λΌκ³ νλ€. 100λ³΄λ€ μμ μ ν λλ²λ μ΄ 13κ°κ° μλ€. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97
10000λ³΄λ€ μκ±°λ κ°μ μ ν λλ²λ₯Ό ν μ€μ νλμ© μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
μ λ ₯μ μλ€.
μΆλ ₯
10,000λ³΄λ€ μκ±°λ κ°μ μ ν λλ²λ₯Ό ν μ€μ νλμ© μ¦κ°νλ μμλ‘ μΆλ ₯νλ€.
μ λ΅
N = 10000
selfie = [False for i in range(N+1)]
def digit_hap(num):
s = num
while num > 0:
s += num % 10
num = num//10
return s
for i in range(1, N+1):
if selfie[i] == False:
move = i
while True:
if move < 10:
move = 2*move
else:
move = digit_hap(move)
if move > N:
break
selfie[move] = True
for idx, value in enumerate(selfie):
if value == False and idx != 0:
print(idx)
μ²μμλ μμ±μκ° μλ μ«μλ₯Ό μ μΈν μλ₯Ό μΆλ ₯ν΄μΌνλ€λ κ±° μμ²΄κ° λ무 λ§λ§νλ€.
κ²°κ΅ 10,000κΉμ§μ λͺ¨λ μ«μλ₯Ό κ²μν΄μΌνλ€.
selfie = [False for i in range(N+1)]
λ°°μ΄μ indexλ₯Ό νμ©νκΈ° μν΄ μνλ λ²μ(N) + 1 κΉμ§μ λ°°μ΄μ λ§λ€μ΄ λͺ¨λ κ°μ Falseλ₯Ό μ μ₯νλ€.
def digit_hap(num):
s = num
while num > 0:
s += num % 10
num = num//10
return s
numμ λͺ¨λ μλ¦Ώμλ₯Ό λνκΈ° μν΄ digit_hap ν¨μλ₯Ό λ§λ λ€.
μ°μ 10μΌλ‘ λλ λλ¨Έμ§λ₯Ό λν ν numμ 10μΌλ‘ λλ λͺ«μ μ΄μ©νμ¬ λ§¨ λμ μ리λΆν° μλΌλ΄λ©° λ°λ³΅νλ€.
for i in range(1, N+1):
if selfie[i] == False:
move = i
while True:
if move < 10:
move = 2*move
else:
move = digit_hap(move)
if move > N:
break
selfie[move] = True
selfieκ° FalseμΈ κ°μ ννμ¬ digit_hap ν¨μλ₯Ό μ€ννλ€.
μ΄λ νμλ¦¬μΈ μλ digit_hapμ μ¬μ©ν νμμμ΄ ν΄λΉ μ«μλ₯Ό *2ν΄μ£Όλ©΄ λλ€.
μ€νν κ²°κ³Όκ° μνλ λ²μμΈ Nλ³΄λ€ ν¬λ€λ©΄ λ°°μ΄μ μ‘΄μ¬νμ§ μκΈ° λλ¬Έμ breakλ₯Ό μ΄μ©νμ¬ λ°λ³΅λ¬Έμ λΉ μ Έλκ°κ³
κ·Έλ μ§ μλ€λ©΄ ν΄λΉ indexμ κ°μ Trueλ‘ λ°κΎΈμ΄μ€λ€.
for idx, value in enumerate(selfie):
if value == False and idx != 0:
print(idx)
enumerateλ₯Ό μ΄μ©νμ¬ μΈλ±μ€μ ν΄λΉ κ°μ μ΄μ©νμ¬ κ°μ΄ FalseμΈ κ²λ§ μΆλ ₯νλ€.
'πμκ³ λ¦¬μ¦ > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€/python] 10250λ² : ACM νΈν (0) | 2021.03.09 |
---|---|
[λ°±μ€/python] 2869λ² : λ¬ν½μ΄λ μ¬λΌκ°κ³ μΆλ€ (0) | 2021.03.09 |
[λ°±μ€/python] 2941λ² : ν¬λ‘μν°μ μνλ²³ (0) | 2021.03.09 |
[λ°±μ€/python] 1157λ² : λ¨μ΄ κ³΅λΆ (0) | 2021.03.09 |
[λ°±μ€/python] 2884λ² : μλ μκ³ (0) | 2021.03.09 |