๐ก๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ด๋?
๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ ํ ์ฌ์ฉํ์ฌ ์ํ์๊ฐ ํจ์จ์ฑ์ ๋น์ฝ์ ์ผ๋ก ํฅ์์ํค๋ ๋ฐฉ๋ฒ์ผ๋ก, ์ด๋ฏธ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ(์์ ๋ฌธ์ )๋ ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ์ฅํ์ฌ(๋ฉ๋ชจ์ด์ ์ด์ ) ๋ค์ ๊ณ์ฐํ์ง ์๋๋ก ํ๋ค. Divde and Conquer(๋ถํ ์ ๋ณต)๊ณผ ๋ค๋ฅธ ์ ์, ๋ถํ ์ ๋ณต์ ๊ฒฝ์ฐ ์ค๋ณต๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ผ๋, DP์ ๊ฒฝ์ฐ ์ค๋ณต๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๐ก๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์กฐ๊ฑด
- ์ต์ ๊ตฌ๋ถ ๊ตฌ์กฐ : ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋ ์ ์์ผ๋ฉฐ, ์์ ๋ฌธ์ ์ ๋ต์ ๋ชจ์ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
- ์ค๋ณต๋๋ ๋ฌธ์ : ๋์ผํ ์์ ๋ฌธ์ ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ํด๊ฒฐํด์ผ ํ๋ค.
๐กํ๋ค์ด, ๋ฐํ ์
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ๊ตฌํ์ ์ผ๋ฐ์ ์ผ๋ก ๋ ๊ฐ์ง ๋ฐฉ์(ํ๋ค์ด, ๋ณดํ ์ )์ผ๋ก ๊ตฌ์ฑ๋๋ค.
ํ๋ค์ด์ ๊ฒฝ์ฐ, ์ฌ๊ท ํธ์ถ์ ์ฌ์ฉํ๋ฉฐ, ์ด๋ ๊ฐ์ฅ ๋จผ์ ํธ์ถ๋๋ ๋ฌธ์ ๋ ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ๋ช ์นญ์ด ๋ถ์๋ค. ํ๋ค์ด ๋ฐฉ์์ ๊ฐ๋ ์ฑ์ด ์ข๊ณ , ๋ณธ๋ ์ ํ์์ ์ดํดํ๊ธฐ ์ฝ๋ค.
๋ฐํ ์ ์ ๊ฒฝ์ฐ, ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ฉฐ, ๊ฐ์ฅ ์์ ๋ฌธ์ ๋ค๋ถํฐ ์ฐจ๋ก๋๋ก ๋ต์ ์์ ์ฌ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ๋ถ๋ฆฐ๋ค. ๋ฐํ ์ ์ ์ฅ์ ์ ํจ์๋ฅผ ๋ณ๊ฐ๋ก ๋ถ๋ฅด์ง ์์ ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ ๋ ์ ์ฝํ ์ ์๋ค๋ ์ ์ด๋ค.
๐ก์์ ์ฝ๋
์ ์ ํฌ์คํ ํ๋ ํผ๋ณด๋์น ์์ด์ ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ด์ฉํ ํ์ด๋ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉํ๋ ์์์ด๋ค.
๋ฌธ์ 1) ์ฒ ์๋ ํธ์์ ์์ ์ผ์ํ๋๋ฐ, ํ๋ ์ผ ์ค ํ๋๊ฐ ๋ฌผ๊ฑด ๊ฐ์ ๊ณ์ฐํ๊ณ ๊ฑฐ์ค๋ฆ๋์ ๊ฑฐ์ฌ๋ฌ์ฃผ๋ ์ผ์ด๋ค. ๋ง์ฝ ๊ฑฐ์ค๋ฆ๋ 5์์ ๊ฑฐ์ฌ๋ฌ์ค์ผ ํ๋๋ฐ ๋์ ์ด 1์, 2์, 5์์ง๋ฆฌ๊ฐ ๋ฌดํํ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๊ทธ๋ฌ๋ฉด ์ฒ ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์(4๊ฐ์ง)๋ก ๊ฑฐ์ค๋ฆ๋์ ๊ฑฐ์ฌ๋ฌ์ค ์ ์๋ค.
- 5์ 1๊ฐ
- 2์ 2๊ฐ + 1์ 1๊ฐ
- 2์ 1๊ฐ + 1์ 3๊ฐ
- 1์ 5๊ฐ
์ด๋ ๊ฒ ๋์ ์ ์ข ๋ฅ์ ๊ฑฐ์ค๋ฆ๋์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ๊ฑฐ์ฌ๋ฌ ์ค ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฆฌํดํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ผ.
- ๋์ ์ ์ข ๋ฅ : int[] type
- ๊ฑฐ์ค๋ฆ๋ : int target
ํ์ด)
์ฐ์ ์์ ์์ ๋ฅผ ์ข ๋ ๊ฐ๋จํ ์ชผ๊ฐ์ด ๋ณด์.
int[] type= {1,2,5} / 0์์ ๋ง๋๋ ๊ฒฝ์ฐ : 1๋ก ์ค์
1์๋ง์ผ๋ก)
1์์ ๋ง๋ค ๋(target=1) : 1
2์์ ๋ง๋ค ๋ : 1+1
3์์ ๋ง๋ค ๋ : 1+1+1
4์์ ๋ง๋ค ๋ : 1+1+1+1
5์์ ๋ง๋ค ๋ : 1+1+1+1+1
1์๊ณผ 2์๋ง์ผ๋ก)
1์์ ๋ง๋ค ๋ : 1
2์์ ๋ง๋ค ๋ : 1+1 , 2 (๊ธฐ์กด์ 1์์ผ๋ก 2์์ ๋ง๋๋ ๊ฒฝ์ฐ์ ์ + 0์(2-2)์ ๋ง๋๋ ๊ฒฝ์ฐ์ ์)
3์์ ๋ง๋ค ๋ : 1+1+1 , 1+2 (๊ธฐ์กด์ 1์์ผ๋ก 3์์ ๋ง๋๋ ๊ฒฝ์ฐ์ ์ + 1์(3-2)์ ๋ง๋๋ ๊ฒฝ์ฐ์ ์)
4์์ ๋ง๋ค ๋ : 1+1+1+1 , 1+1+2, 2+2 (๊ธฐ์กด์ 1์์ผ๋ก 4์์ ๋ง๋๋ ๊ฒฝ์ฐ์ ์ + 2์(4-2)์ ๋ง๋๋ ๊ฒฝ์ฐ์ ์)
5์์ ๋ง๋ค ๋ : 1+1+1+1+1 , 1+1+1+2, 1+2+2 (๊ธฐ์กด์ 1์์ผ๋ก 5์์ ๋ง๋๋ ๊ฒฝ์ฐ์ ์ + 3์(5-2)์ ๋ง๋๋ ๊ฒฝ์ฐ์ ์)
1์๊ณผ 2์๊ณผ 5์์ผ๋ก)
1์์ ๋ง๋ค ๋ : 1
2์์ ๋ง๋ค ๋ : 1+1 , 2 (๊ทธ๋๋ก)
3์์ ๋ง๋ค ๋ : 1+1+1 , 1+2 (๊ทธ๋๋ก)
4์์ ๋ง๋ค ๋ : 1+1+1+1 , 1+1+2, 2+2 (๊ทธ๋๋ก)
5์์ ๋ง๋ค ๋ : 1+1+1+1+1 , 1+1+1+2, 1+2+2 , 5 (๊ธฐ์กด์ 1์์ผ๋ก 5์์ ๋ง๋๋ ๊ฒฝ์ฐ์ ์ + 0์(5-5)์ ๋ง๋๋ ๊ฒฝ์ฐ์ ์)
์ฝ๋)
public long ocean(int target, int[] type){
long[] dp = new long[target + 1];
dp[0] = 1;
for(int i=0;i<type.length;i++){
for(int j=1;j<=target;j++){
if(type[i]<=j)
dp[j] += dp[j - type[i]];
}
}
return dp[target];
}
๋ฌธ์ 2) ์ฒ ์๋ ํธ์์ ์์ ์ผ์ํ๋๋ฐ, ํ๋ ์ผ ์ค ํ๋๊ฐ ๋ฌผ๊ฑด ๊ฐ์ ๊ณ์ฐํ๊ณ ๊ฑฐ์ค๋ฆ๋์ ๊ฑฐ์ฌ๋ฌ์ฃผ๋ ์ผ์ด๋ค. ๋ง์ฝ ๊ฑฐ์ค๋ฆ๋ 14์์ ๊ฑฐ์ฌ๋ฌ์ค์ผ ํ๋๋ฐ ๋์ ์ด 1์, 4์, 5์,6์์ง๋ฆฌ๊ฐ ๋ฌดํํ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๊ทธ๋ฌ๋ฉด ์ฒ ์๊ฐ ๊ฑฐ์ค๋ฆ๋์ ์ค ์ ์๋ ๊ฒฝ์ฐ์ ์ ์ค์์ ๋์ ์ ๊ฐฏ์๋ฅผ ์ต์๋ก ํ ๋์ ๊ฐฏ์๋ ์ด๋ป๊ฒ ๋๋๊ฐ?
ํ์ด)
๊ฐ์ฅ ํํ ๋จ์๊ฐ ํฐ ๊ฒ๋ถํฐ ์ฌ์ฉํ๋ค๊ณ ๋์ ์ ์ต์๋ก ์ฌ์ฉํจ์ ๋ณด์ฅํ ์ ์๋๊ฐ? NO
6์*2 + 1์ *2 -> 4๊ฐ
5์*2 + 4์*1 -> 3๊ฐ ( ์ฌ์ฉํ๋ ๋์ ์ ๊ฐฏ์๊ฐ ๋ ์์)
์ด๋ฌํ ๊ฒฝ์ฐ๋ ์์์ ํ๋ ๊ฒ ์ฒ๋ผ 1์๋ง ์ฌ์ฉํ ๋, 1์๊ณผ 4์์ ์ฌ์ฉํ ๋, 1์, 4์, 5์์ ์ฌ์ฉํ ๋, ๋ชจ๋ ์ฌ์ฉํ ๋๋ก ๋๋ ์ ํ์ด์ผ ํ๋ค. ๊ทธ๋ ๊ฒ ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ 1์๋ง ์ฌ์ฉํ ๋์์ 1์,4์๋ง ์ฌ์ฉํ ๋๋ก ๋์ด๊ฐ ๋ ๊ฐฏ์๋ฅผ ๋น๊ตํด ๋ ์ ์ ๊ฒ์ ์ ์ฅํ๋๋ก ํด์ค์ผ ํ๋ค.
1์,4์ -> 1์, 4์, 5์์ผ๋ก ๋์ด๊ฐ ๋๋ ๋ง์ฐฌ๊ฐ์ง.
์์ ๋ฌธ์ ๋ ๊ฑฐ์ค๋ฆ๋์ ๋ผ ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํด์ผ ํ์ง๋ง, ์ด ๋ฌธ์ ์ ๊ฒฝ์ฐ ๋์ ์ ์ต์๋ก ์ฌ์ฉํ ๋๋ฅผ ๊ตฌํด์ผ ํ๋ฏ๋ก, ๋งค๋ฒ ์ด๋ ๊ฒ์ด ์ต์์ธ์ง ์ฒดํฌํด์ค์ผ ํ๋ค.
์ฝ๋๋ ์๋์ ๊ฐ๋ค.
์ฝ๋)
public void coin(int[] coins, int target){
int[] dp = new int[target + 1];
for(int i=1;i<=target;i++) dp[i]=1000001;
for(int i=0;i<coins.length;i++){
System.out.printf("๋์ %d ์ฌ์ฉ์\n", coins[i]);
for(int j=coins[i];j<=target;j++){
dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);
System.out.printf("%d %d\n",j,dp[j]);
}
System.out.println("-".repeat(60));
}
System.out.println(dp[target]);
}
'์๊ณ ๋ฆฌ์ฆ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฌธ์ ํ์ด[ํ.๊ทธ.๋จธ] - ๊ณต์ ์ฐ์ฑ , ๋ฐํํ๋ฉด ์ ๋ฆฌ (0) | 2023.07.04 |
---|---|
๋ฌธ์ ํ์ด[ํ.๊ทธ.๋จธ] - ๋ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ, ์ถ์ต ์ ์ (0) | 2023.07.03 |
ํ์ ์๊ณ ๋ฆฌ์ฆ(Greedy) (0) | 2023.07.03 |
์ฌ๊ทํจ์, ์ฌ๊ท์ ์ฌ๊ณ (2) | 2023.03.15 |
์ด์ง ํ์ (0) | 2022.08.10 |