[C++ / 2293] 동전 1

2023. 8. 3. 15:51·알고리즘/백준
728x90

문제

 

2293번: 동전 1

첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다.

www.acmicpc.net


문제 설명

n가지 종류의 동전이 있다.

각각의 동전이 나타내는 가치는 다르다.

이 동전을 사용해서, 가치의 합이 k원이 되도록 하고 싶다.

각각의 동전은 몇 개라도 사용할 수 있다.

그 경우의 수를 쓰시오.

 

! 사용한 동전의 구성이 같은데, 순서만 다른 것은 같은 경우이다.


풀이 방식

이 문제는 DP 알고리즘을 통해 푸는 문제이다.즉, 전의 결과의 값이 현재의 값을 정하는데 반영이 된다.

 

다음 예시를 통해 알아보자.

3 10
1
2
5

만약 n = 3, k= 10 이고 1, 2, 5라는 수가 주어진다.1만 사용해서 1을 만드는 경우 - 1

1만 사용해서 2을 만드는 경우 - 1

1만 사용해서 3을 만드는 경우 - 1 ....

그렇기 때문에 처음 만들어 지는 dp[j]의 값들은 전부 1이다.

1만 사용해서 0을 만들순 없지만 점화식의 편의를 위해 1로 둔다.

 

다음은 전의 결과를 기반으로 현재 값을 추가했을때 만들 수 있는 경우의 수를 모두 측정한다.

2만 사용해서는 0과 1을 만들수 없다. 그럼으로 추가가 없다.

하지만, j = 2부터는 2를 사용해서 만들 수가 있다. 

 

이때, 2를 사용해서 5를 만드는 경우의 수를 생각해 보면, 1과 2를 사용해서 3을 만드는 총 경우의 수이다.

그렇기에 j = 2부터 dp[j] 더하기가 시작되는 것이다.

 

즉 이를 정리하면 다음과 같은 식이 나온다.

dp[j] = dp[j] - dp[j - 주어진 값]

 


솔루션

#include <iostream>
#include <vector>

using namespace std;

int main()
{
  ios_base::sync_with_stdio(0);
  cin.tie(0);

  int n, k;
  cin >> n >> k;

  vector<int> v(n);
  vector<int> dp(k + 1);

  for (int i = 0; i < n; i++)
    cin >> v[i];

  dp[0] = 1;

  for (int i = 0; i < n; i++)
  {
    for (int j = v[i]; j <= k; j++)
    {
      dp[j] += dp[j - v[i]];
    }
  }

  cout << dp[k] << endl;
}
저작자표시 (새창열림)

'알고리즘 > 백준' 카테고리의 다른 글

[C++ / 1260] DFS와 BFS  (0) 2023.08.09
[C++ / 9095] 1, 2, 3 더하기  (0) 2023.08.08
[C++ / 11053] 가장 긴 증가하는 부분 수열  (0) 2023.07.30
[C++ / 2012] 등수 매기기  (0) 2023.07.29
[C++ / 11047] 동전 0  (0) 2023.07.28
'알고리즘/백준' 카테고리의 다른 글
  • [C++ / 1260] DFS와 BFS
  • [C++ / 9095] 1, 2, 3 더하기
  • [C++ / 11053] 가장 긴 증가하는 부분 수열
  • [C++ / 2012] 등수 매기기
기짜낭
기짜낭
생각이 많지만, 지금 내가 해야할 것을 하자.
  • 기짜낭
    So tired
    기짜낭
    • 분류 전체보기 (199)
      • 개발 (11)
        • Javascript (19)
        • Typescript (5)
        • Canvas (8)
        • React (13)
        • C (3)
      • 활동 (63)
        • 개인 프로젝트 (33)
        • 나눔 서포터즈 3기 (9)
        • 멋쟁이 사자처럼 (7)
        • 0&1 C++ 자료구조 스터디 (0)
        • 제 9회 창업 아이디어톤 (3)
        • Poom (ZeroWasteShop) (3)
        • 해커톤 (2)
        • 우테코 프리코스 7기 (6)
      • 알고리즘 (27)
        • 알고리즘 정리 (5)
        • 백준 (18)
        • 프로그래머스 (4)
      • 강연 (7)
      • 독서 (18)
      • 회고 & 생각 (16)
        • 연간회고 (4)
      • 기타 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • ※ 예전 블로그
  • 인기 글

  • 태그

    군대
    CSS
    대학
    타입스크립트
    개발
    디자인
    알고리즘
    독서
    프론트엔드
    개념
    독후감
    1주에 1권씩
    개발자
    프로그래밍
    한양대학교
    ES6
    Erica
    1주 1권
    에리카
    우테코
    HTML
    프로젝트
    TypeScript
    tutorial
    react
    백준
    HTML5
    Javascript
    3기
    canvas
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
기짜낭
[C++ / 2293] 동전 1
상단으로

티스토리툴바