=== ì ‘ê·¼ === ì²˜ìŒ ë¬¸ì œë¥¼ ì œëŒ€ë¡œ ì´í•´í•˜ì§€ ì•Šê³ '그냥 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] - ë™ê°. DamienRice 20080929