728x90
동적 프로그래밍이란?
하나의 큰 문제를 여러 개의 공통되는 작은 문제로 나누어 정답을 찾은 뒤, 작은 문제의 정답들을 결합하여 알고리즘을 푸는 과정을 말한다.
메모이제이션이란?
컴퓨터 프로그램이 동일한 계산을 반복해야 할 때, 이전에 계산한 값을 메모리에 저장함으로써 동일한 계산의 반복 수행을 제거하여 프로그램 실행 속도를 빠르게 하는 기술이며 동적 계획법의 핵심이 되는 기술이다.
Example
# 피보나치 수열(Bottom up)
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)
def fib(n):
if n==0 or n == 1 :
return 1
else :
res = fib(n-1) + fib(n-2)
memo[n] = res # 메모이제이션
return res
Q . 다음 data 리스트에서 이웃하지 않는 숫자들의 합 중 최댓값을 구하라
data = [ 3, 4, 5, 6, 1, 2, 5 ]
A .
더보기
def solution(data):
# 값이 1개인 경우 그대로 반환
if len(data) == 1:
return data[0]
# 값이 1개, 2개인 경우 추가
result = [ data[0], max(data[0], data[1]) ]
# 리스트 값이 3개 이상일때
for i in range(2, len(data) ):
result.append( max( result[i-1], result[i-2] + data[i] ) )
return result[-1]
data = [ 3, 4, 5, 6, 1, 2, 5 ]
print(solution(data)) # 정답 15
728x90
'IT > 알고리즘' 카테고리의 다른 글
[python/알고리즘] 소수 구하기 (2) | 2021.05.06 |
---|---|
[python/알고리즘] 최대 공약수 구하기 (0) | 2021.05.05 |
[python/자료구조] 재귀함수 (0) | 2021.02.15 |
[python/자료구조] DFS 와 BFS (0) | 2021.02.12 |
[python/자료구조] 탐색( 완전탐색 / 이분탐색 ) (0) | 2021.02.05 |
댓글
최근에 올라온 글
TAG
- algorithm
- slqd
- sklearn
- 부스트코스
- SQL
- Project
- db
- MongoDB
- 알고리즘
- Python
- VGGNet
- 프로그래머스
- OpenCV
- 자료구조
- 기계학습
- Ai
- SQLD
- 경사하강법
- 파이썬
- cnn
- 인공지능
- Scikit
- Max()
- 주니온
- Programmers
- numpy
- Min()
- 머신러닝
- Pandas
- 딥러닝
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Total
- Today
- Yesterday
250x250