19. 다이나믹 프로그래밍 : 타일 깔기, 효율적인 화폐 구성
2021. 11. 17. 22:01ㆍ파이썬/알고리즘
가로의 길이가 N, 세로의 길이가 2인 직사각형 형태의 얇은 바닥이 있다.
1 * 2, 2 * 1, 2 * 2의 덮개로 채울 때 모든 경우의 수를 구하라.
N이 3인, 즉 2 * 3 크기의 바닥을 채우는 경우의 수는 5가지이다.
input :
3
output :
5
N = int(input())
memory = [0]* 1000
memory[0] = 1
memory[1] = 3
for i in range(2, N):
memory[i] = memory[i-1] +memory[i-2] * 2
print(memory[i])
이 문제는 그림을 그려가며 규칙을 찾아서 풀었다.. 후 그림 그리고 규칙을 찾는 것이 중요할 듯..
효율적인 화폐 구성
N가지 종류의 화폐가 있다. 이 화폐들의 구성을 최소한을 이용하여 가치의 합이 M원이 되게 하라.
N, M = map(int,input().split())
unit = []
memory = [10001] * 10001
for i in range(N):
unit.append(int(input()))
memory[0] = 0
for i in range(N):
for j in range(M+1):
memory[j] = min(memory[j], memory[j - unit[i]]+1)
print(memory[M])
점점 이해가 가기 시작한다.!!! 알고리즘 마스터 가즈아~~
반응형
'파이썬 > 알고리즘' 카테고리의 다른 글
| 그리디 문제 : 모험가 길드 풀이 (0) | 2021.12.07 |
|---|---|
| 20. 최단 경로 : 다익스트라 알고리즘 (0) | 2021.11.18 |
| 18. 다이나믹 프로그래밍 : 개미 전사 (0) | 2021.11.17 |
| 17. 다이나믹 프로그래밍 : 1로 만들기 (0) | 2021.11.17 |
| 16. 다이나믹 프로그래밍 : 문제 풀이 전략 (0) | 2021.11.17 |