μ κ·Ό ¶
μ²μ λ¬Έμ λ₯Ό μ λλ‘ μ΄ν΄νμ§ μκ³ 'κ·Έλ₯ 2,3,5 μΈμ μμ μ μΈνκ² μλκ°?' λ‘ μ κ·Όνλ€κ° 14 λ μλλΌλ κ²μ κ°κ³Ό. λ€μ μ²μλΆν° μ κ·Ό.
μ°μ΅μ₯μ μ΄κ²μ κ² μ¨λ³΄λ€κ° λλ΅ λκ°μ§ μ κ·Όλ²μ΄ μκ°λλ€. νλλ κ° μλ€λ§λ€ 'isUglyNumber' , νλλ μ§μλ₯Ό μ΄μ©ν λ°©λ². μΌλ¨μ 'isUglyNumber' λ¨Όμ ꡬνν΄λ³΄κΈ°λ‘ ν΄λ΄. (μλ κ°λ¨νλ―λ‘)
~cpp def isDivideOnly235(number): while True: if number == 1: return True if number % 2 != 0 and number % 3 !=0 and number % 5 != 0: return False number = toDivide(number) def toDivide(number): for x in [2,3,5]: if number % x == 0: number=number/x return number def uglyNumber(count): if count == 1: return 1 idx = 2 currentCount = 2 while True: if isDivideOnly235(idx): print idx,currentCount if currentCount == count: return idx currentCount += 1 idx+=1
νμ§λ§, κ²°κ³Όκ°μ 보면μ μ§μ μ€νμΌμ μ κ·Όλ²μ΄ μνλ μ κ·Όλ²μ΄λΌλ μκ°μ νκ² λλ€. (10μ΅μ΄ λλλ€ ν λ, isUglyNumber μμ΄λΌλ©΄ 10μ΅λ²μ΄ μ€νλλ€.) νμ§λ§, κ·Έλ₯ μ§μλ‘λ§ μκ°νλ©΄ uglynumber μ μμ μ λ§μ§ μμ κ²μΈμ§λΌ (1 : 2^0*3^0*5^0, 2 : 2^1*3^0*5^0, 3 : 2^0*3^1*5^0, 4 : 2^2*3^0*5^0 ... 0,0,0 , 1,0,0, 0,1,0 , 2,0,0 .. λλ¬΄μ§ μ«μλ€ κ°μ μ°κ΄μ±μ΄ μ‘νμ§ μμλ€.
κ·Έλ¬λ€κ°, 'μμ΄.. κ± sort ν΄λ²λ¦¬μ.' μ κ·Ό. νμ§λ§, n κ°μ λ°λΌ κ²°κ³Όκ° μν₯μ λ°μ κ²μ΄λΌλ λ§μ°ν μκ°μ μ°μ΅μ₯μμ νμ°Έ κ³ λ―Ό. κ·Έλ₯ μ€μ μνλ κ° λ³΄λ€ μ¬μ λΆ κ°μ λ§λ€κ³ μ λΉν λ΅μ λ΄λ λ°©μμΌλ‘ μ κ·Ό. νμ§λ§, 무μΈκ° κ΅μ₯ν μ°μ°ν¨.
UglyNumbers/JuNe μ½λ λΆμ. 2μκ° λμ 보λ€κ° λλ¬΄μ§ μ κ·Όλ²μ μ΄ν΄ λͺ»νλ€. ν 3μκ°μ§Έμ―€ 보λ€κ° http://www.acmsolver.org/?itemid=28#ggviewer-offsite-nav-9512048 λ³΄κ³ μ΄ν΄ & μ’μ .
λμ€μ μ΄λ€ μκ°μ νλ©΄ μ λ°©λ²μ΄ λ μ€λ₯ΌκΉμ λν΄ κ³ λ―Ό.
--1002
λμ€μ μ΄λ€ μκ°μ νλ©΄ μ λ°©λ²μ΄ λ μ€λ₯ΌκΉμ λν΄ κ³ λ―Ό.
--1002
- λκ°. DamienRice 20080929