[BOJ] 2293 동전 1

SSOYEONG·2022년 4월 19일
0

Problem Solving

목록 보기
28/60
post-thumbnail

🔗 Problem

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

👩‍💻 Code

package baekjoon;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

// 동전 1

public class BJ2293 {
	
	static int n;
	static int k;
	static int[] coin;
	static int[] dp;
	
	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());
		
		coin = new int[n];
		dp = new int[k+1];
		
		for(int i = 0; i < n; i++) {
			coin[i] = Integer.parseInt(br.readLine());
		}
		
		dp[0] = 1;
		for(int i = 0; i < n; i++) {
			for(int j = coin[i]; j <= k; j++) {
				dp[j] += dp[j - coin[i]];
			}
		}
		
		System.out.println(dp[k]);
	}
	

}

📌 Note

아이디어

  • dp 점화식을 세우는 데까지 시간이 꽤 걸렸다.
  • 처음에 dp를 2차원 배열로 선언하여 행은 각 동전, 열은 1~k로 설정하였다.
  • dp[x][y]라면, 0번~x번까지의 동전을 사용하여 합이 y가 되는 경우의 수를 담는다.
  • 맞았습니다 후 다른 풀이를 참고하니 1차원 배열로도 가능하여 수정하였다.
profile
Übermensch

0개의 댓글