상세 컨텐츠

본문 제목

백준 2293번

백준 알고리즘 풀이

by 발발개발 2022. 6. 22. 13:26

본문

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

 

2293번: 동전 1

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

www.acmicpc.net

 

풀이

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

public class Main {
    private static final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
    private static final StringBuilder stringBuilder = new StringBuilder();

    public static void main(String[] args) throws Exception {
        StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
        int n = Integer.parseInt(stringTokenizer.nextToken());
        int k = Integer.parseInt(stringTokenizer.nextToken());

        int[] currentArr = new int[k + 1];
        int[] nextArr = new int[k + 1];
        int[] coin = new int[n];

        for (int i = 0; i < n; i++) {
            coin[i] = Integer.parseInt(bufferedReader.readLine());
        }

        for (int i = 1; i < k + 1; i++) {
            if (i % coin[0] == 0) {
                currentArr[i] = 1;
            }
        }

        for (int i = 1; i < n; i++) {
            int coinValue = coin[i];

            for (int j = 1; j < k + 1; j++) {
                if (j < coinValue) {
                    nextArr[j] = currentArr[j];
                } else if (j == coinValue) {
                    nextArr[j] = currentArr[j] + 1;
                } else {
                    nextArr[j] = currentArr[j] + nextArr[j - coinValue];
                }
            }

            currentArr = nextArr;
        }

        System.out.println(stringBuilder.append(currentArr[k]));
    }
}

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

백준 24479번  (0) 2022.06.22
백준 7579번  (0) 2022.06.22
백준 2629번  (0) 2022.06.21
백준 10942번  (0) 2022.06.21
백준 1520번  (0) 2022.06.20

관련글 더보기

댓글 영역