[Algorithm] 백준 17213번 - 과일 서리

문제 링크 : https://www.acmicpc.net/problem/1978

문제

민건이네 과일 농장은 N가지 종류의 과일을 재배하는 중이다. 평소 민건이에게 앙심을 품고 있던 지환이는 민건이를 골탕 먹이기 위하여 민건이네 과일 농장에서 과일들을 훔치기로 다짐했다. 지환이는 완벽한 범죄를 위하여 처음 생각한 개수 만큼만 훔치려고 한다. 이때 지환이가 훔칠 수 있는 경우의 수가 몇가지나 될 지 알아보자. 단, 모든 종류의 과일을 적어도 1개는 훔친다.

입력

첫째 줄에 과일의 종류 수 N(1 ≤ N ≤ 10)이 주어진다.

둘째 줄에 훔치려 하는 과일의 개수 M(N ≤ M ≤ 30)이 주어진다.

출력

첫째 줄에 훔칠 수 있는 경우의 수를 출력한다.

✍풀이

dp를 이용해 풀 수 있는 문제이고 규칙은 dp[i][j] += dp[i-1][1~j-1] 이다. 이중배열 루프와 합까지 동시에 구해야 하기 때문에 3중for문을 사용했다.

코드

//https://velog.io/@cjhlsb
import java.util.*;
public class Main {
    public static void main(String[] args){
    	Scanner sc= new Scanner(System.in);
    	int n = sc.nextInt();
    	int m = sc.nextInt();
    	int[][] dp = new int[n+1][m+1];
    	for(int i=1;i<=n;i++)
    	{
    		dp[i][i] = 1;
    	}
    	for(int i=1;i<=m;i++)
    	{
    		dp[1][i] = 1;
    	}
    	for(int i=2;i<=n;i++)
    	{
    		for(int j=i+1;j<=m;j++)
    		{
    			for(int k=1;k<j;k++)
    			{
    				dp[i][j] += dp[i-1][k];
    			}
    		}
    	}
    	System.out.println(dp[n][m]);
    }
}

좋은 웹페이지 즐겨찾기