Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- golang
- boj
- DP
- docker
- programmers
- 코드워
- Go언어
- codewars
- gradle
- go
- 알고리즘
- 프로그래머스
- leetcode
- 스칼라
- Linux
- HBase
- zookeeper
- Java
- 주키퍼
- 튜토리얼
- 문제풀이
- OOM
- 리눅스
- 동적프로그래밍
- Python
- redis
- dynamic programming
- 파이썬
- 자바
- scala
Archives
- Today
- Total
파이문
2293. 동전 1 본문
728x90
2293. 동전 1
(https://www.acmicpc.net/problem/2293)
동전 경우의 수 구하는, 나름 유명한 문제다. 역시나 알고스팟에도 같은 문제가 있다. (https://algospot.com/judge/problem/read/COINS)
구하려는 값 크기를 갖는 배열 dp를 만드는 데, 이 때 사이즈를 값 + 1 해야, 예외 처리 따로 하지 않고 쉽게 할 수 있다.
이렇게 만들어진 dp 에 경우의 수를 갱신하는데, i는 i원을 의미한다.
예를 들어서 dp[3]은 3원을 만드는 방법인데, 3원을 만드는 방법은 1원을 만드는 방법과 2원을 만드는 방법 두개를 더 하면 된다.
유투브에 강의 몇 개가 있어서 하나 첨부해 본다. https://www.youtube.com/watch?v=jaNZ83Q3QGc
import java.util.Scanner;
public class Main {
public int problem2293(int[] coins, int k) {
int[] dp = new int[k + 1];
dp[0] = 1;
for (int i = 0; i < coins.length; ++i) {
for (int j = coins[i]; j < k + 1; ++j) {
dp[j] = dp[j] + dp[j-coins[i]];
}
}
return dp[k];
}
public static void main(String[] args) {
Main main = new Main();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[] coins = new int[n];
for (int i = 0; i < n; ++i) {
coins[i] = sc.nextInt();
}
System.out.println(main.problem2293(coins, k));
}
}
'문제 풀이 > BOJ' 카테고리의 다른 글
11053. 가장 긴 증가하는 부분 수열 (0) | 2017.11.12 |
---|---|
2579. 계단 오르기 (0) | 2017.11.12 |
1149. RGB 거리 (0) | 2017.04.04 |
1463. 1로 만들기 (0) | 2017.04.03 |
1003. 피보나치 함수 (0) | 2017.04.03 |
Comments