동적 계획법(DP)
- 작은 문제 해결 후 이를 이용하여 큰 문제를 해결
- 상향식 접근법 (보텀업)
- Memoization 기법(하향식/탑다운)
Memoization? = caching
- 프로그램 실행 시 이전의 값을 저장하여 중복되는 계산 횟수를 줄여 실행 속도를 빠르게 하는 기술
동적 계획법 문제 풀이
동적계획법 문제이다.
피보나치 수열을 해결하는 방법과 똑같아서 코드를 작성하였는데
메모리 초과가 떴다.
import sys
n = int(sys.stdin.readline())
dp=[0]*1000001
dp[1]=1
dp[2]=2
for i in range(3,n+1):
dp[i] = dp[i-1]+dp[i-2]
print(dp[n]%15746)
dp리스트의 크기를 미리 할당하면 메모리 초과가 해결되는 문제가 있었기에 이번에도 그렇게 하였는데
해결되지 않았다.
글 읽기 - 파이썬 메모리 초과는 왜때문일까요;;; (acmicpc.net)
이 답변을 보고 해결하였는데,
파이썬의 int형은 고정된 크기가 아니므로 변수의 크기에 따라 사용하는 메모리가 변한다는 것을 참고하여
코드를 수정하였다.
import sys
n = int(sys.stdin.readline())
dp=[0]*1000001
dp[1]=1
dp[2]=2
for i in range(3,n+1):
dp[i] = (dp[i-1]+dp[i-2])%15746
print(dp[n])
728x90
'자료구조 & 알고리즘 & cs > 알고리즘' 카테고리의 다른 글
[TIL] 그래프- 개념 (0) | 2023.03.27 |
---|---|
[TIL] 탐색 알고리즘- 이진 탐색, 순차 탐색 (0) | 2023.03.24 |
[TIL] 병합정렬 - Merge Sort (0) | 2023.03.15 |
[TIL] 퀵정렬 - Quick Sort (0) | 2023.03.15 |
[TIL] 정렬 - Sorting (0) | 2023.03.09 |