코딩테스트/백준

백준 9084 : 동전

Mev01 2022. 2. 8. 11:30

https://www.acmicpc.net/problem/9084

 

9084번: 동전

우리나라 화폐단위, 특히 동전에는 1원, 5원, 10원, 50원, 100원, 500원이 있다. 이 동전들로는 정수의 금액을 만들 수 있으며 그 방법도 여러 가지가 있을 수 있다. 예를 들어, 30원을 만들기 위해서는

www.acmicpc.net

 

여러 가지 종류의 동전을 이용해 금액 M을 만들 수 있는 모든 경우의 수를 구하는 문제입니다.

 

dp[0] = 1;
for(int i = 0 ; i < N; i++) {
    for(int j = coin[i]; j <= M; j++) {
        dp[j] += dp[j - coin[i]];
    }
}

이를 DP를 이용하려면 위와 같은 코드를 사용하면 됩니다.

오름차순으로 정렬된 코인 별로 금액 M까지 경우의 수를 각각 구해주면 됩니다.

 

예를 들어, (1, 2, 5)라는 동전들이 있다면

먼저 1 동전을 가지고 계산을 진행합니다.

dp[1] += dp[1 - coin[0]], dp[2] += dp[2 - coin[0]], ..., dp[M] += dp[M - coin[0]]

이렇게 하면 1~M까지 1 동전을 가지고 만들 수 있는 모든 경우의 수를 나타낼 수 있습니다.

 

그다음 2 동전을 이용하여 계산을 진행합니다.

j가 3일 경우, 1 동전을 이용해 1을 만드는 경우인 (1)에 2를 더해주어 (1 + 2)라는 1개의 경우의 수를 만들 수 있습니다.

따라서 dp[3] += dp[3 - coin[1]] = dp[1] = 1입니다.

 

 

아래의 블로그를 참고하면 더 자세한 설명을 볼 수 있습니다.

https://baejji-codingbox.tistory.com/entry/%EB%B0%B1%EC%A4%80dp-2293%EB%B2%88

 

[백준][dp] 2293번

접근 방법 문제에 나와 있는 예시를 가지고 경우의 수를 작성해봤다. 모든 문제가 그러하긴 하지만 예시 외에도 여러 케이스를 염두해서 규칙을 생각하는 것이 필요하다! 우리가 가진 동전은 총

baejji-codingbox.tistory.com

 

 

'코딩테스트 > 백준' 카테고리의 다른 글

백준 10942 : 팰린드롬?  (0) 2021.07.12
백준 1981 : 배열에서 이동  (0) 2021.07.08
백준 1939 : 중량제한  (0) 2021.06.22
백준 1202 : 보석 도둑  (0) 2021.06.16
백준 10158 : 개미  (0) 2021.04.18