Skip to content

Commit c47adc0

Browse files
feat: coin-change ํ’€์ด
1 parent a3da5a1 commit c47adc0

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
2+
//1. top-down
3+
var coinChange = function(coins, amount) {
4+
if(amount == 0 ) return 0
5+
/*
6+
์ ํ™”์‹ : dp[n] = Math.min(dp[n],dp[n-k]+1)
7+
*/
8+
const dp = new Array(amount+1).fill(Math.pow(10,4));
9+
for(let c of coins){
10+
dp[c] = 1
11+
}
12+
function dfs(idx,coin){
13+
if(idx + coin > amount) return
14+
dp[idx+coin] = Math.min(dp[idx+coin],dp[idx]+1)
15+
if(idx + coin == amount){
16+
return
17+
}else{
18+
for(let c of coins){
19+
//์—ฌ๊ธฐ์„œ dfs๋ฅผ ์•ˆ๋“ค์–ด๊ฐ€๋Š” ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ?
20+
dfs(idx+coin,c)
21+
}
22+
}
23+
}
24+
dfs(0,coins[0])
25+
26+
if(dp[amount] > amount) return -1
27+
28+
return dp[amount]
29+
30+
};
31+
32+
// ํƒ€์ž„๋ฆฌ๋ฐ‹์— ๊ฑธ๋ฆฐ๋‹ค. dfs์˜ ๊ฐ€์ง€์น˜๊ธฐ๊ฐ€ ๋œ ๋˜์–ด์„œ ๊ทธ๋ ‡๋‹ค.
33+
// ๊ทธ๋ ‡๋‹ค๋ฉด, ์ˆœ์ฐจ์ ์ธ dp๋ฅผ ์ข€๋” ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์•„๋ณด์ธ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ๋ฉ”๋ชจ์ด์ œ์ด์…˜์˜ ์ด์ ์„ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์—†์–ด๋ณด์ธ๋‹ค.
34+
35+
36+
37+
//2. bottom-up
38+
var coinChange = function(coins, amount) {
39+
coins = coins.filter(x=> x<=amount)
40+
if(amount == 0) return 0
41+
/*
42+
์ ํ™”์‹ : dp[n] = Math.min(dp[n],dp[n-k]+1)
43+
*/
44+
const dp = new Array(amount+1).fill(Math.pow(10,4)+1);
45+
dp[0] = 0
46+
//dfs๋ฅผ ์“ฐ๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, amount๋งŒํผ์˜ for๋ฌธ์„ ๋Œ๋ฉด์„œ dp๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
47+
for(let i=1; i <amount+1; i++){
48+
for(let coin of coins){
49+
if(i-coin >= 0){
50+
dp[i] = Math.min(dp[i-coin] + 1,dp[i])
51+
}
52+
}
53+
}
54+
if(dp[amount] > amount) return -1
55+
return dp[amount]
56+
57+
};
58+
59+
/**
60+
dfs๋ฅผ ์“ฐ๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, amount๋งŒํผ์˜ for๋ฌธ์„ ๋Œ๋ฉด์„œ dp๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
61+
์ฒ˜์Œ์— coins = coins.filter(x=> x<=amount)
62+
์ด๋ ‡๊ฒŒ ์“ด ์ด์œ ๋Š”, amount๋ณด๋‹ค ์ž‘์€ ์ฝ”์ธ๋งŒ ํ•„ํ„ฐํ•˜์—ฌ ์ตœ์ ํ™”ํ•œ๋‹ค.
63+
64+
์ด ๋ฌธ์ œ ํ’€์ด ์†Œ์š”์‹œ๊ฐ„์ด 1์‹œ๊ฐ„์ด ๋„˜์—ˆ๋Š”๋ฐ,
65+
๊ทธ ์ด์œ ๊ฐ€, i-coin์ด ์•„๋‹ˆ๋ผ, i+coin์„ ๊ธฐ์ค€์„ ์‚ผ์•˜์—ˆ๋‹ค.
66+
๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ ๊ฐ ๊ธˆ์•ก `i`์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด `dp[i]`๋ฅผ `dp[i-coin]` ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐฑ์‹ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ํ•ต์‹ฌ์ ์ธ ์•„์ด๋””์–ด๋ฅผ ์ ์šฉํ•˜๊ธฐ ์–ด๋ ค์› ๋‹ค.
67+
`dp[i+coin]` ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด, `dp[i]` ์ž์ฒด๊ฐ€ ์•„์ง ์ตœ์ ์˜ ์ƒํƒœ๊ฐ€ ์•„๋‹Œ๋ฐ๋„ ๊ทธ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฏธ๋ž˜์˜ `dp[i+coin]`์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ •ํ™•ํ•œ ์ตœ์ ํ•ด๋ฅผ ์ฐพ์•„๋‚ด๊ธฐ ์–ด๋ ค์› ๋‹ค.
68+
ํ˜„์žฌ ๊ธˆ์•ก `i`๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์„ ๊ณผ๊ฑฐ์˜ `dp[i-coin]`์—์„œ ์ฐพ๋Š” '๋ฐ”ํ…€์—…(Bottom-Up)' ๋ฐฉ์‹์ด ์ด ๋ฌธ์ œ์— ํ›จ์”ฌ ์ ํ•ฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค.
69+
70+
71+
72+
์‹œ๊ฐ„๋ณต์žก๋„: O(n * m)
73+
๊ณต๊ฐ„ ๋ณต์žก๋„ : O(n)
74+
*/

0 commit comments

Comments
ย (0)