https://www.acmicpc.net/problem/2293
2293번: 동전 1
첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다.
www.acmicpc.net
백준 - 동전 1 (2293번)
난이도 : Gold 5
알고리즘 : Dynamic Programming
풀이 소요 시간 : 60분
import sys
input = sys.stdin.readline
if __name__ == '__main__':
n, k = map(int, input().split())
memo = [0] * (k+1)
memo[0] = 1
for _ in range(n):
coin = int(input())
for i in range(k-coin+1):
memo[i+coin] += memo[i]
print(memo[-1])
예전에 풀었던 문제였는데, Knapsack과 결이 비슷하다.
n이 100까지라 그냥 DFS로 풀릴 줄 알았는데, 얄짤없이 "시간초과"가 떠버렸다.
그래서 DP를 적용했더니 잘 풀렸다.
처음에는 동전을 역순으로 정렬해서 풀었는데,
굳이 정렬을 안해도 된다는 걸 깨달았다.
처음에 DFS로 풀다가 시간을 꽤나 잡아먹었다;;
'Algorithm' 카테고리의 다른 글
마법사 상어와 비바라기 (21610번) - 백준 (BOJ) (0) | 2023.04.24 |
---|---|
이차원 배열과 연산 (17140번) - 백준 (BOJ) (0) | 2023.04.24 |
1, 2, 3 더하기 4 (15989번) - 백준 (BOJ) (0) | 2023.04.24 |
등대 (133500번) - 프로그래머스 (Programmers) (0) | 2023.04.24 |
경사로 (14890번) - 백준 (BOJ) (0) | 2023.04.24 |