Development/CodingTest

ė™ģ ź³„ķšė²•(Dynamic Programming)

Kirok Kim 2022. 1. 24. 17:21
  • ķ•˜ė‚˜ģ˜ 큰 문제넼 ģ—¬ėŸ¬ ź°œģ˜ ź³µķ†µė˜ėŠ” ģž‘ģ€ 문제딜 ė‚˜ėˆ„ģ–“ģ„œ ģž‘ģ€ ė¬øģ œģ˜ ģ •ė‹µė“¤ģ„ ź²°ķ•©ķ•˜ģ—¬ ģ•Œź³ ė¦¬ģ¦˜ģ„ ķ‘øėŠ” 과정
  • ģ ķ™”ģ‹
    • ģˆ˜ģ—“ģ—ģ„œ n번째 ķ•­ģ„ ģ“ģ „ģ— ė‚˜ģ˜Ø ķ•­ė“¤ė”œ ė‚˜ķƒ€ė‚ø ź³µģ‹
  • Bottom up 방법
    • ģž‘ģ€ ė¬øģ œģ—ģ„œ 큰 문제딜 반복문 호출
    • ķ”¼ė³“ė‚˜ģ¹˜ ģˆ˜ģ—“

 

[1,1,2,3,5,8,13,21]
def fib(n):
	fibList[1,1]
	for i in range(2,n+1):
		fibList.append(fibList[i-2]+fibList[i-1])
	return fibList[-1]
  • Top Down 방법
    • 큰 ė¬øģ œģ—ģ„œ ģž‘ģ€ 문제딜 ģž¬ź·€ 호출
  • [1,1,2,3,5,8,13,21]
    def fib(n):
    	if n==0||n==1:
    		return 1
    	else:
    		return fib(n-1)+fib(n-2)
    
     
  • ė©”ėŖØģ“ģ œģ“ģ…˜(Memoization)
    • ė°°ģ—“ ķ˜¹ģ€ ķ•“ģ‹œė„¼ ķ™œģš©ķ•˜ėŠ” ź²ƒģ“ 핵심
    • memo={0:1,1:1}
      def fib(n):
      	if n in memo:
      		return memo[n]
      	else:
      		result = fib(n-1)+fib(n-2)
      		memo[n]=result
      		return result
      
       
      • data=[3,4,5,6,1,2,5]
        
        def solution(data):
        	if len(data)==1:
        		return data[0]
        	result = [data[0],max(data[0],data[1])
        	for i in range(2,len(data)):
        		result.append(max(result[i-1],sesult[i-2]+data[i])
        	return result[-1]

 

 

 

ė°˜ģ‘ķ˜•