b.2293 동전 1

2025. 1. 21. 14:28·Algorithm & Data Structures/BOJ

 

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

 

고민의 흔적

 

 

이 문제는 dp를 활용하여 N가짓 수의 동전이 주어졌을때

K의 값을 몇가지 방법으로 나타낼 수 있는지 즉 몇가지 조합으로

K값을 나타낼 수 있는지에 대한 경우의수를 묻는 문제다.

 

k가 3이면 2,1 과 1,2 가 있는데 이는 순서만 다르기에 같은경우의 수로 취급한다.

 

이문제를 보자 2차원 DP 배열을 생각해 낼 수 있었다.

dp [i][j] 는 i까지 동전을 사용했을 때 나타낼 수 있는 경우의 수로 정의하고

dp[0][j]에서 0은 coins[0]이므로 0까지의 동전이아니라 coins[0] 동전만 사용했을때

경우의 수가 된다.

 

이를 통해 점화식을 세워 봤을 때, 

 

dp[i][j] = dp[i-1][j];
if (j >= coins[i]) {
    dp[i][j] += dp[i][j - coins[i]];
}

다음과 같은 점화식을 세워볼 수 있었다.

 

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class b2293 {

    static int N, K;
    static int[][] dp;
    static int[] coins;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        K = Integer.parseInt(st.nextToken());
        coins = new int[N];

        for (int i = 0; i < N; i++) {
            coins[i] = Integer.parseInt(br.readLine());
        }

        Arrays.sort(coins);
        logic();
        System.out.println(dp[N-1][K]);
    }

    private static void logic() {
        dp = new int[N][K+1];

        for (int i = 0; i <= K; i++) {
            dp[0][i] = (i % coins[0] == 0) ? 1 : 0;
        }

        for (int i = 1; i < N; i++) {
            for (int j = 0; j <= K; j++) {
                dp[i][j] = dp[i-1][j];
                if (j >= coins[i]) {
                    dp[i][j] += dp[i][j - coins[i]];
                }
            }
        }
    }
}

'Algorithm & Data Structures > BOJ' 카테고리의 다른 글

b24497. 알고리즘 수업 - 깊이 우선 탐색 1  (0) 2025.01.27
b.17298 오큰수  (1) 2025.01.23
b2629. 양팔저울  (0) 2025.01.17
b11049. 행렬 곱셈 순서  (0) 2025.01.13
b11066. 파일 합치기  (0) 2025.01.10
'Algorithm & Data Structures/BOJ' 카테고리의 다른 글
  • b24497. 알고리즘 수업 - 깊이 우선 탐색 1
  • b.17298 오큰수
  • b2629. 양팔저울
  • b11049. 행렬 곱셈 순서
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    오늘
    어제
    • 분류 전체보기 (305) N
      • Algorithm & Data Structures (231) N
        • BOJ (90) N
        • SWEA (1)
        • Programers (136)
        • Data Structures (3)
      • DB (21) N
        • SQL (15) N
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • 네트워크 (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    다익스트라
    동적계획법
    algorithm
    백트래킹
    BFS
    dp
    알고리즘
    Stack
    unionfind
    binarySearch
    구현
    프로그래머스
    위상정렬
    DynamicProgramming
    유니온파인드
    dfs
    programmers
    전위순회
    이분탐색
    스택
    백준
    후위순회
    baekjoon
    PriorityQueue
    이진탐색
    Dijkstra
    Union-Find
    경로압축
    투포인터
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Geisha
b.2293 동전 1
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.