[문제풀이] 거스름돈
업데이트:
문제 링크 : 거스름돈
풀이 시간 : 측정 불가
1. 문제 풀이
동전을 사용해서 만들 수 있는 n을 만들 수 있는 경우의 수 찾는 문제
여러 동전의 종류가 있고 동전의 수는 무한하다는 가정
동전의 종류 i개로 j(0 ~ n)을 만들 수 있는 경우를 구하는 방법
(i,j) = (i-1,j) + (i,j-money[i])를 이용하여 풀이
2. 소스 코드
public int solution(int n, int[] money) {
long[] v = new long[n + 1];
v[0] = 1;
for (int i = 0; i < money.length; i++) {
// 동전의 종류 i 개로 j를 만들 수 있는 경우
for (int j = money[i]; j <= n; j++) {
v[j] += v[j - money[i]];
}
}
return (int) (v[n] % 1000000007);
}
3. 후기
처음에는 완전 탐색으로 구현하였지만 효율성에서 실패하였습니다.
DP를 이용해서 풀려고 했지만 한번에 모든 종류를 사용하려고 해서 못 풀었습니다.(시간 측정 불가 이유)
i개씩 먼저 구한다는 힌트를 보고 해결하였습니다.