바닥공사 코드(p. 223)
N = int(input())
data = [0] * 1001
data[1] = 1
data[2] = 3
for i in range(3, N + 1):
data[i] = (data[i - 1] + 2 * data[i - 2]) % 796796
print(data[N])
간단한 dp 문제이다.
효율적인 화폐 구성(p. 226)
N, M = map(int, input().split())
money = []
for i in range(N):
money.append(int(input()))
data = [0] * 10001
for i in money:
data[i] = 1
for i in range(money[len(money) - 1] + 1, M + 1):
ans = 10001
for j in money:
if data[i - j] != 0:
ans = min(ans, data[i - j] + 1)
data[i] = ans
if data[M] == 10001:
print(-1)
else:
print(data[M])
money 배열에 화폐를 넣어주고 data배열에 필요로하는 최소의 화폐 개수를 계속 업데이트 해가면 된다.
'알고리즘 > python' 카테고리의 다른 글
| 1715번 카드 정렬하기(python) (0) | 2022.01.27 |
|---|---|
| 1316번 그룹 단어 체커(python3) (0) | 2022.01.25 |
| 이.코.테 1로 만들기, 개미 전사(python3) (0) | 2022.01.24 |
| 이.코.테 부품찾기, 정렬된 배열에서 특정 수의 개수 구하기(이진 탐색) (0) | 2022.01.24 |
| 18352번 특정 거리의 도시 찾기(python3) (0) | 2022.01.23 |