ì ‘ê·¼ ¶
연습장ì—�서 ì�´ê²ƒì €ê²ƒ ì �어보기 시ë�„. 처ì�Œì—�는 ê°� ê²°ê³¼ 수 ê°„ì—� 무언가 수열ì�´ 있ì�„까 해서 ì �ì–´ë´„.
연습장ì—� ì�˜ì‚¬ 코딩 5ë¶„ì •ë�„ 한 ë’¤, 바로 코드로 ì˜®ê¸°ê³ ì‹¤í–‰.
~cpp 1 2 8 3 6 9 17 4 20 7 9 1 6 -5 3 3 8 -13 17 -13 2ë�„ì €ížˆ 수열스럽지 않아서 다시 숫ìž�들 ê°„ì�˜ 관계를 ì�´ë¦¬ ì �ì–´ë³´ë�˜ì¤‘, 지난번ì�˜ UglyNumber ì—�서ì�˜ ë¬¸ì œì ‘ê·¼ë²•(DynamicProgramming)ì�„ í•´ë´„. 혹시 앞ì�˜ 계산값ì�´ ë’¤ì�˜ 계산ì—� ì�´ìš©ë�˜ì§€ 않ì�„까 ìƒ�ê°�ì�„ 해보다.
~cpp n ê°’ì�˜ 변화 1 : 1 2 : 2 -> 1 3 : 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1 4 : 4 -> 2 -> 1 . .숫ìž�들ì�„ 주욱 나열해보면서 해당 n ê°’ 대비 count cycle Length ì�˜ ê°’ì�€ ê³ ì •ì �ì�¼ê²ƒì�´ë�¼ëŠ” ì �ê³¼, ì�´ ê°’ì�„ ì�¼ì¢…ì�˜ caching ì�„ 하여 ì�´ìš©í• 수 ìžˆê² ë‹¤ëŠ” ìƒ�ê°�ì�´ 들다.
~cpp
class CycleLength:
def __init__(self):
self._cache = {1:1}
def createTable(self,i,j):
return [self.value(each) for each in range(i,j)]
def value(self,n):
if self._cache.get(n) is not None: return self._cache.get(n)
if n % 2 == 1:
self._cache[n] = self.value(3*n+1)+1
return self._cache[n]
else:
self._cache[n] = self.value(n/2)+1
return self._cache[n]
def maxCycleLengthInRange(self,i,j):
#return max(self.createTable(i,j))
maxValue=0
for each in range(i,j):
maxValue = max(maxValue,self.value(each))
return maxValue
def testOne():
r"""
>>> c=CycleLength()
>>> [c.value(n) for n in range(1,5)]
[1, 2, 8, 3]
>>> c.maxCycleLengthInRange(1,10)
20
>>> c.maxCycleLengthInRange(100,200)
125
>>> c.maxCycleLengthInRange(201,210)
89
>>> c.maxCycleLengthInRange(900,1000)
174
"""
def main():
import doctest
doctest.testmod()
def main2():
c=CycleLength()
print c.maxCycleLengthInRange(1,999999)
if __name__=="__main__":
import time
start=time.time()
import psyco
psyco.bind(main2)
main2()
end = time.time()
print "time :", end-start
ëŠ�ë‚€ì � ¶
지난번ì�˜ ë¬¸ì œë¥¼ 풀었ì�„때 'ì ‘ê·¼ë²•' ë�„ ê°™ì�´ ìƒ�ê°�하여 ë¬¸ì œ 해결방법ì�„ ì�µížŒê²ƒì�´ 추후ì�˜ ë¬¸ì œ(ê²°ê³¼ ìƒ�으로는 ì „í˜€ 다른 ì•Œê³ ë¦¬ì¦˜)ì�˜ 해결법ì�„ 알아내는ë�° 좋ì�€ ì ‘ê·¼ë²•ì�„ ì œê³µí•´ì¤€ 것ì�´ ëŠ�낌ì�´ 좋았다. 새 í•´ê²°ì±…ì�„ ë– ì˜¬ë¦¬ëŠ”ë�° 10ë¶„ì�´ ì•ˆê±¸ë¦¬ê³ , 비êµ�ì � 효과ì �ì�¸ ì•Œê³ ë¦¬ì¦˜ì�´ 나온 ì �ì—�서 기분ì�´ 좋ì�€ 중.
--1002











