Search
Duplicate
🙆🏻‍♀️

동전 1

주차
12
문제번호
2293
언어
C++
티어
실버
유형
DP
nj_Blog
nj_상태
이해도
풀이
사람
이해도 2
13 more properties

1. 문제 풀이

n 가지 종류의 동전으로 그 가치의 합이 k원이 될 수 있는 경우의 수를 구하는 문제이다. 각각의 동전은 몇개라도 사용할 수 있다.
(1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 으로 주어진다.
우선 해당 값을 만들 수 있는 경우의 수는 값의 배수 일때 1번.
순열으로 만들었을때 두가지 동전으로 만들 수 있는 경우의 수 = 이전 동전으로 만들 수 있는 경우의 수 + 현재 동전으로 만들 수 있는 경우의 수 가 되는것이다.
이것을 점화식으로 인덱스에 기록해가며 더해가면 해당 동전들로 가능한 경우의 수를 구할 수 있다.
처음 첫 인덱스에 값을 1로 설정하고 그 뒤를 0으로 초기화해 처음 coin의 값이 들어갈 때 1이 더해지도록 했다.

2. 코드

#include <iostream> using namespace std; int main(int argc, char const *argv[]) { int n,k; //동전 종류 수 cin >> n; //가치 cin >> k; int coin; //가치크기 배열 1, 0 ... 초기화 int val[k + 1] = {1,}; for (int j = 0; j < n; j++) { cin >> coin; //코인의 값을 받아 i에 설정, 코인의 값만큼 이전 인덱스 값을 더해가며 저장 for (int i = coin; i < k + 1; i++) val[i] += val[i - coin]; } cout << val[k] << endl; return 0; }
C++
복사

3. 채점 기록

메모리 : 2016KM / 0ms