백준 2293 c

magicdrill·2024년 3월 6일
0

백준 문제풀이

목록 보기
109/655

백준 2293 c

#include <stdio.h>
#include <stdlib.h>

#pragma warning(disable:4996)

int input(int lower, int upper)
{
	int A;

	while (1)
	{
		scanf("%d", &A);
		if (A >= lower && A <= upper)
		{
			break;
		}
		else
		{
			;
		}
	}

	return A;
}

void input_arr(int* arr, int n)
{
	int i;

	for (i = 0; i < n; i++)
	{
		arr[i] = input(1, 100000);
	}

	return;
}

int main(void)
{
	int n, k, i, j;
	int coin[100];
	int* dp;

	n = input(1, 100);
	k = input(1, 10000);
	input_arr(coin, n);
	dp = (int*)malloc(sizeof(int) * 100001);//동전의 가장 큰 가치만큼 돌아야함
	if (dp == NULL)
	{
		return -1;
	}
	for (i = 0; i <= k; i++)
	{
		dp[i] = 0;
	}
	dp[0] = 1;
	for (i = 0; i < n; i++)
	{
		for (j = coin[i]; j <= k; j++)
		{
			dp[j] = dp[j] + dp[j - coin[i]];
		}
	}
	printf("%d\n", dp[k]);

	/*for (i = 0; i <= k; i++)
	{
		printf("%d ", dp[i]);
	}
	printf("\n");*/

	free(dp);

	return 0;
}

0개의 댓글