티스토리 뷰

Algorithm

백준_동전2_2294

Young_J 2020. 12. 8. 23:09

//알고리즘

1. dp

 -> dp 테이블을 k+1 크기로 만듦

 -> dp 테이블을 아주 큰 수로 초기화

 -> k수 마다 동전으로 만들 수 있는지 없는지를 판단함

    - k가 동전보다 클 때, dp[ k - 동전 ] 값이 max인지를 판단하여 아니라면 1+ dp[ k - 동전 ]

 -> 만들 수 있다면 최소값으로 갱신

 

 

더보기

 

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

public class 동전2_2294 {
	static int n, k, coin[], 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());
		}

		Arrays.fill(dp, Integer.MAX_VALUE);
		dp[0] = 0;

		for (int j = 1; j <= k; j++) {
			for (int i = 0; i < n; i++) {
				if (j >= coin[i]) {
					if (dp[j - coin[i]] == Integer.MAX_VALUE) continue;
					int cal = 1 + dp[j - coin[i]];
					if (cal < dp[j]) dp[j] = cal;
				}

			}
		}

		System.out.println(dp[k] == Integer.MAX_VALUE ? -1 : dp[k]);

	}

}

 

※ dp 는 항상 느끼지만 설명하기가 어렵다...

 

  0 1 2 3 4 5 6 7 8 9 10
3 max max 1 max max 2 max max 3 max
4 0 max max 1 1 max 2 2 2 3 max

 

'Algorithm' 카테고리의 다른 글

백준_숨바꼭질_1697  (0) 2020.12.10
백준_제로_10773  (0) 2020.12.09
백준_상근이의 여행_9372  (0) 2020.12.07
SW Expert Academy_최장경로  (0) 2020.12.06
백준_동전1_2293  (0) 2020.12.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함