[백준 알고리즘] 17213번: 과일 서리

17213번: 과일 서리

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

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

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

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

접근 방법:

DFS를 통한 중복 조합을 찾아 해결했다. 무조건 각 종류의 과일이 한번씩은 포함되어야하기 때문에 조합을 찾을 때 M-N개의 조합만 찾으면 된다.

통과 코드:

#include <iostream>
#include <vector>

using namespace std;

int M, N;
vector<int> frt (30);

int DFS(int pos, int cnt){
    if (cnt == M-N){
        vector<int> temp;
        return 1;
    }
    int ret = 0;
    for (int i = pos  ; i < N ; i++){
        frt[cnt] = i;
        ret += DFS(i, cnt+1);
    }
    return ret;
}

int main (){
    cin >> N >> M;

    int result = DFS(0, 0);

    cout << result;
    return 0;
}

Written by@전여훈 (Click Me!)
고민이 담긴 코드를 만들자, 고민하기 위해 공부하자.