๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€ ์Šคํ„ฐ๋”” 8์ฃผ์ฐจ] 9084๋ฒˆ ๋™์ „ ๊ณจ๋“œ5 - ์ž๋ฐ”(JAVA) / ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” DP

๐Ÿ“‘ ๋ฌธ์ œ

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

 

9084๋ฒˆ: ๋™์ „

์šฐ๋ฆฌ๋‚˜๋ผ ํ™”ํ๋‹จ์œ„, ํŠนํžˆ ๋™์ „์—๋Š” 1์›, 5์›, 10์›, 50์›, 100์›, 500์›์ด ์žˆ๋‹ค. ์ด ๋™์ „๋“ค๋กœ๋Š” ์ •์ˆ˜์˜ ๊ธˆ์•ก์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ๋ฐฉ๋ฒ•๋„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 30์›์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š”

www.acmicpc.net

๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ

๋ฌธ์ œ

์šฐ๋ฆฌ๋‚˜๋ผ ํ™”ํ๋‹จ์œ„, ํŠนํžˆ ๋™์ „์—๋Š” 1์›, 5์›, 10์›, 50์›, 100์›, 500์›์ด ์žˆ๋‹ค. ์ด ๋™์ „๋“ค๋กœ๋Š” ์ •์ˆ˜์˜ ๊ธˆ์•ก์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ๋ฐฉ๋ฒ•๋„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 30์›์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” 1์›์งœ๋ฆฌ 30๊ฐœ ๋˜๋Š” 10์›์งœ๋ฆฌ 2๊ฐœ์™€ 5์›์งœ๋ฆฌ 2๊ฐœ ๋“ฑ์˜ ๋ฐฉ๋ฒ•์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋™์ „์˜ ์ข…๋ฅ˜๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ์— ์ฃผ์–ด์ง„ ๊ธˆ์•ก์„ ๋งŒ๋“œ๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ์„ธ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T(1 ≤ T ≤ 10)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ๋™์ „์˜ ๊ฐ€์ง€ ์ˆ˜ N(1 ≤ N ≤ 20)์ด ์ฃผ์–ด์ง€๊ณ  ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” N๊ฐ€์ง€ ๋™์ „์˜ ๊ฐ ๊ธˆ์•ก์ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ๊ธˆ์•ก์€ ์ •์ˆ˜๋กœ์„œ 1์›๋ถ€ํ„ฐ 10000์›๊นŒ์ง€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค. ์„ธ ๋ฒˆ์งธ ์ค„์—๋Š” ์ฃผ์–ด์ง„ N๊ฐ€์ง€ ๋™์ „์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•  ๊ธˆ์•ก M(1 ≤ M ≤ 10000)์ด ์ฃผ์–ด์ง„๋‹ค.

ํŽธ์˜๋ฅผ ์œ„ํ•ด ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋Š” 231 - 1 ๋ณด๋‹ค ์ž‘๊ณ , ๊ฐ™์€ ๋™์ „์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” N๊ฐ€์ง€ ๋™์ „์œผ๋กœ ๊ธˆ์•ก M์„ ๋งŒ๋“œ๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 ์ด ๋ฌธ์ œ๋Š” "๊ฒฝ์šฐ์˜ ์ˆ˜"๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž„์„ ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค. ์ฐจ๊ทผ์ฐจ๊ทผ ์ ‘๊ทผํ•˜๋‹ˆ ๊ฒจ์šฐ ์ดํ•ด๋๋‹ค.

 

 

 

 ๋จผ์ € ์ด ๊ฐœ๋…์„ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.

 ๐Ÿ”” ํŠน์ • ๋™์ „์„ "์จ์•ผํ•œ๋‹ค"๋Š” ๊ฒƒ์€, (ํŠน์ • ๋™์ „์„ ์•ˆ ์“ด ๊ธˆ์•ก)์— (ํŠน์ • ๋™์ „)์„ ์จ์„œ (๋ชฉํ‘œ ๊ธˆ์•ก)์„ ๋งŒ๋“ ๋‹ค๋Š” ๋œป์ด๋‹ค.

 ์ฆ‰, (๋ชฉํ‘œ ๊ธˆ์•ก-ํŠน์ • ๋™์ „ ๊ธˆ์•ก)์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์— (ํŠน์ • ๋™์ „)๋ฅผ ์“ฐ๋Š” ์ผ€์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

 

 

 โžก๏ธ ์œ„ ๊ฐœ๋…์„ ๊ฐ€์ง€๊ณ  ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž.

 1์›์„ ๊ฐ€์ง€๊ณ  1์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ํ•œ ๊ฐ€์ง€์ด๋‹ค. 1์›๋ณด๋‹ค ์ž‘์€ ๋™์ „์€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, 1์› ๋”ฑ ํ•˜๋‚˜๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ 1๊ฐœ๋งŒ์ด ์กด์žฌํ•œ๋‹ค.

 

 โ— ์ด๋•Œ, 2์›์„ ๊ฐ€์ง€๊ณ  3์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

 ์œ„์— ์ฃผ์˜ํ•œ ๊ฐœ๋…์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด, (๋ชฉํ‘œ๊ธˆ์•ก 3์›-ํŠน์ • ๋™์ „๊ธˆ์•ก 2์›)์ธ 1์›์„ ๋งŒ๋“œ๋Š” ๊ฐ ๊ฒฝ์šฐ์˜ ์ˆ˜์— (ํŠน์ • ๋™์ „ 2์›)์„ ์“ฐ๋Š” ์ผ€์ด์Šค๋งŒ ์ถ”๊ฐ€๋œ๋‹ค.

 ๋”ฐ๋ผ์„œ 2์›์„ ๊ฐ€์ง€๊ณ  3์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š”, 1์›์„ ๋งŒ๋“œ๋Š” ํ•œ ๊ฐ€์ง€ ๊ฒฝ์šฐ{1์›}์— 2์›์ด๋ผ๋Š” ์ผ€์ด์Šค๋งŒ์„ ์ถ”๊ฐ€ํ•œ ํ•œ ๊ฐ€์ง€ ๊ฒฝ์šฐ{1์›, 2์›}๊ฐ€ ๋œ๋‹ค.

 

 โ— ์กฐ๊ธˆ ๋” ์‘์šฉํ•˜์—ฌ, 2์›๊ณผ 4์›์„ ๊ฐ€์ง€๊ณ  4์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

 โœ”๏ธ ๋จผ์ € ์ œ์ผ ์ž‘์€ ๋™์ „ 2์›๋ถ€ํ„ฐ ๋ชฉํ‘œ๊ธˆ์•ก 4์›๊นŒ์ง€ ๋งŒ๋“ค์–ด ๋ณธ๋‹ค. 2์›์„ ๊ฐ€์ง€๊ณ  2์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 1๊ฐ€์ง€์ด๋‹ค.

 

 โœ”๏ธ ๋‹ค์Œ, 2์›์„ ๊ฐ€์ง€๊ณ  ๋ชฉํ‘œ๊ธˆ์•ก 3์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๋Š” (3-2, 1์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜)์— (2์›์ด๋ผ๋Š” ์ผ€์ด์Šค)๋ฅผ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ด๋‹ค. 1์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 0๊ฐ€์ง€์ด๋ฏ€๋กœ(ํ˜„์žฌ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋™์ „์€ 2์›๊ณผ 4์›๋ฐ–์— ์—†๋‹ค), 2์›์„ ๊ฐ€์ง€๊ณ  3์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๋„ 0๊ฐ€์ง€์ด๋‹ค.

 

 โœ”๏ธ ๋‹ค์Œ, 2์›์„ ๊ฐ€์ง€๊ณ  ๋ชฉํ‘œ๊ธˆ์•ก 4์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๋Š” (4-2, 2์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ)์˜ ์ˆ˜์— (ํŠน์ • ๋™์ „ 2์›)์„ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ด๋‹ค. ์ตœ์ข… 2์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” {2์›} 1๊ฐ€์ง€์ด๋ฏ€๋กœ, ์—ฌ๊ธฐ์— ๋ชฉํ‘œ๊ธˆ์•ก 4์›์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋™์ „ 2์›์„ ์ถ”๊ฐ€ํ•˜๋ฉด (2์›์„ ๊ฐ€์ง€๊ณ  4์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜)๋Š” {2์›, 2์›} ํ•œ ๊ฐ€์ง€๊ฐ€ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ๋˜์–ด์žˆ๋Š” dp[4](์ฃผ์–ด์ง„ ๋™์ „์œผ๋กœ 4์›์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜)์—๋Š” 1์ด ์ €์žฅ์ด ๋œ๋‹ค.

 

 โœ”๏ธ ๋งˆ์ง€๋ง‰์œผ๋กœ, 4์›์„ ๊ฐ€์ง€๊ณ  4์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. (4-4, 0์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜)๋Š” ์•„๋ฌด ๋™์ „๋„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์€ ๊ณต์ง‘ํ•ฉ{ } ํ•œ ๊ฐ€์ง€์ด๋‹ค. ๋”ฐ๋ผ์„œ 0์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์— 4์› ๋™์ „์„ ์‚ฌ์šฉํ•˜๋Š” ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด {4์›} ํ•œ ๊ฐ€์ง€๊ฐ€ ๋œ๋‹ค. ์ด๋ฅผ dp[4]์— ์ €์žฅํ•ด์ฃผ๋ฉด dp[4]๋Š” 2์›์œผ๋กœ 4์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ 1๊ฐ€์ง€, 4์›์œผ๋กœ 4์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ 1๊ฐ€์ง€๊ฐ€ ๋”ํ•ด์ ธ ์ด 2๋ผ๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค. 

 

 

 

 ์œ„์— ์ •๋ฆฌํ•œ ๊ฐœ๋…๋“ค์„ ๊ฐ€์ง€๊ณ  ์ฝ”๋“œ๋ฅผ ์ฝ์–ด๋ณด๋ฉด ์ด์ œ ์ดํ•ด๊ฐ€ ๊ฐˆ ๊ฒƒ์ด๋‹ค.

 

 

 

 

 

 

 

 

๐Ÿ™‹‍โ™€๏ธ ์˜๊ฒฌ

 ๋‚ด๊ฐ€ ์‹ซ์–ดํ•˜๋Š” DP ๋ฌธ์ œ๋„ค......

 ์ด๋ฒˆ ๋ฌธ์ œ ์—ญ์‹œ ๊ฐ€๋‹ฅ์„ ์ž˜ ๋ชป์žก์•˜๋Š”๋ฐ, ์•„๋ž˜ ์ฃผ์†Œ์˜ ํ’€์ด๊ฐ€ ๋งŽ์€ ๋„์›€์ด ๋๋‹ค.

 (https://ddb8036631.github.io/boj/9084_%EB%8F%99%EC%A0%84/)

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ์ž๋ฐ”(Java)

public class Main_๋ฐฑ์ค€_9084_๋™์ „_๊ณจ๋“œV {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		StringBuilder sb = new StringBuilder();
		int TC= Integer.parseInt(br.readLine());
		
		for (int testCase = 1; testCase <= TC; testCase++) {
			int N = Integer.parseInt(br.readLine()); //๋™์ „์˜ ๊ฐ€์ง€ ์ˆ˜
			int[] coins = new int[N];
			st = new StringTokenizer(br.readLine());
			for (int i = 0; i < N; i++) {
				// 1~10000
				coins[i] = Integer.parseInt(st.nextToken());
			}
			int M = Integer.parseInt(br.readLine()); //๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๊ธˆ์•ก
			//input
            
			// dp[m]: m์›์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์ง€ ์ˆ˜ 
			int[] dp = new int[M+1]; //1~M
			dp[0] = 1;
			for (int i = 0; i < N; i++) {
				int coin = coins[i];
				for (int j = coin; j <= M; j++) {
					dp[j] += dp[j-coin];
				}
			}
			sb.append(dp[M]).append("\n");
		}//end of testCase
		System.out.println(sb);
	}//end of main
    
}//end of class

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ