í°ì¤í 리 ë·°
ì¶ì² : https://www.acmicpc.net/problem/2293
2293ë²: ëì 1
첫째 ì¤ì n, kê° ì£¼ì´ì§ë¤. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) ë¤ì nê°ì ì¤ìë ê°ê°ì ëì ì ê°ì¹ê° 주ì´ì§ë¤. ëì ì ê°ì¹ë 100,000ë³´ë¤ ìê±°ë ê°ì ìì°ìì´ë¤.
www.acmicpc.net


ð Solve
dpë°°ì´ì ì¬ì©í´ì íììµëë¤.
ì²ìì ì íìì´ ë무 ì ë³´ì¬ì ê³µì± ì í©ì´ 1ë¶í° 10ê¹ì§ ëì¬ ì ìë 모ë ê²½ì°ì ì를 ì ì´ë³´ììµëë¤.
dpì 기본ì ì¸ ë¬¸ì ì¸ íì¸í¸ì¹ í기ì ê·ì¹ì´ ë¹ì·í´ ë³´ì´ëë° ì´ë»ê² í ì ììê¹ ê³ ë¯¼íë¤ê°
ëì ì ì¢ ë¥ìë°ë¼ ê°ì를 ë°ë¡ ì¸ì´ì£¼ë ê·ì¹ì ì°¾ì ì ìììµëë¤.
ìì ì ê°ì´ ëì ì ì¢ ë¥ê° 1, 2, 5ê° ììµëë¤.
ì´ ëì ì ì¢ ë¥ë¤ì ë´ì ì ìë coinë°°ì´ì ë§ë¤ì´ ë´ìì¤ëë¤. ( coin [] = {1, 2, 5} )
dp ë°°ì´ì K를 ê·¸ëë¡ ì¬ì©í기 ìí´ K+1ì í¬ê¸°ë§í¼ ì ì¸í´ì£¼ììµëë¤.
주ìí ì ì, ë§ì½ ëì ì í¬ê¸°ê° 구íë ¤ê³ íë Kë³´ë¤ í¬ë¤ë©´ í´ë¹ ëì ì¼ë¡ K를 ë§ë¤ ì ìë ê²½ì°ê° ìê³ , dpë°°ì´ì ë²ì를 ë²ì´ë기 ë문ì ì ë ¥ì ë°ì ë ìì¸ì²ë¦¬ë¥¼ í´ì£¼ì´ì¼ í©ëë¤.
ì°ì ëì 1ì ì¬ì©í´ì ê° ê°ì¹ì í©ì ë§ë¤ ì ìë ê²½ì°ì ì를 ë£ì´ì¤ëë¤.

ë¤ìì¼ë¡ ëì 1ê³¼ 2를 ì¬ì©í´ì ê° ê°ì¹ì í©ì ë§ë¤ ì ìë ê²½ì°ì ì를 ë£ì´ì¤ëë¤.
기존 ëì 1ì ì¬ì©íì¬ ë£ì´ì¤ dpì ëì 2ì ê°ì를 ëì íì¬ í©íì¬ì¤ëë¤.
ëì 2ì ê°ìë íì¬ ìì ì ê°ì¹ìì 2를 ëº ê°ì¹ì dpê°ì ëíë ëë¤.
ì를 ë¤ì´ íì¬ ê°ì¹ê° 5ë¼ë©´,
ê°ì¹ê° 3ì¼ ë 모ë ê²½ì° : (1, 1, 1), (2, 1) ì ëì 2를 ëíë©´
ê°ì¹ê° 5ì¼ ë 모ë ê²½ì° : (1, 1, 1, 2), (2, 1, 2) ì´ë¯ë¡, dp[5]ì 2ì ê°ìë dp[3]ì ëë¤.

ë§ì§ë§ì¼ë¡ ëì 1ê³¼ 2, 5를 ì¬ì©í´ì ê° ê°ì¹ì í©ì ë§ë¤ ì ìë ê²½ì°ì ì를 ë£ì´ì¤ëë¤.
ëì 5ì ê°ì를 구í ëë, íì¬ ê°ì¹ìì 5를 ëº ê°ì¹ì dpê°ì ì¬ì©í©ëë¤.

ë°ë¼ì 구í ì ìë ì íìì dp[ i ] += dp[ i - coin[ c ] ]ë¡ ëíë¼ ì ììµëë¤.
ëµì dp[K]를 ì¶ë ¥í©ëë¤.
â Code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N; //ëì ì¢
ë¥
static int K; //ê°ì¹ì í©
static int[] coin;
static int[] dp;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
coin = new int[N];
dp = new int[K+1];
for(int i=0;i<N;i++){
int temp = Integer.parseInt(br.readLine());
// ëì ì í¬ê¸°ê° 구íê³ ì íë ê°ì¹ Kë³´ë¤ ìê±°ë ê°ìëë§ ë´ìì¤.
if(temp<=K){
coin[i] = temp;
}
}
for(int c=0;c<coin.length;c++){
int curCoin = coin[c];
dp[curCoin] += 1;
for(int i=curCoin+1;i<=K;i++){
dp[i] += dp[i-curCoin];
}
// System.out.println(Arrays.toString(dp));
}
System.out.println(dp[K]);
}
}'ìê³ ë¦¬ì¦ > ë°±ì¤' ì¹´í ê³ ë¦¬ì ë¤ë¥¸ ê¸
- TAG
- BOJ, dp, Java, ëì íë¡ê·¸ëë°, ë°±ì¤, ìê³ ë¦¬ì¦
- ë°ê°ìµëë¤. ê¸ì 구ì±ê³¼ íë¦ì´ ë§¤ì° ìì°ì¤ë¬ì ìµëë¤.â¯
- ë¤ë ë¤ ê°ëë¤~ ì½ë ë´ë´ 몰ì íì´ì. ììì ìë¯¸ë¡ â¯
- ë°ë»í ì´ì¼ê¸° ëë¶ì íë£¨ê° ë ì¦ê±°ìì¡ì´ì. ê°ì¬í©ëâ¯
- ê¸ì´ ì°¸ ê¹ì´ê° ìë¤ì. ê°ì ê³¼ ë ¼ë¦¬ê° ì ì¡°í를 ì´ë¤â¯
- Total
- 1,011
- Today
- 0
- Yesterday
- 0
- ìê³ ë¦¬ì¦
- Java
- ì´ìì²´ì
- OS
- docker-compose
- ì´íí°ë¸ìë°
- ìì íì
- ìí
- dp
- subset
- Retrofit2
- Container
- bruteforce
- docker
- BFS
- ë°±ì¤
- BOJ
- í í°ê¸°ë°ì¸ì¦
- ì¡°í©
- ìì´í 60
- ê·¸ëííì
- EffectiveJava
- IMAGE
- dfs
- ìì´í 61
- DevOps
- springboot
- ìì´í 59
- ìì´
- cicd
