728x90
반응형

문제

17213번 : 과일 서리

 

17213번: 과일 서리

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

www.acmicpc.net

내가 작성한 코드 (C++ 성공)

#include <iostream>

using namespace std;

int sel[8];
int cnt;
int n, m;

int Comb(int index, int count){
	if(count == m-n){
		cnt++;
		return 0;
	}
	
	for(int i=index; i<n; i++){
		sel[count] = i+1;
		Comb(i, count+1);
	}
}

int main(){
	cin >> n >> m;
	Comb(0, 0);
	cout << cnt << "\n";
	return 0;
}

 

정리

이 문제는 경우의 수에 중복을 인정하지 않기 때문에
중복 조합으로 해결하거나 브루트 포스를 이용해서 풀 수 있는 문제였다.
나는 그래서 중복 조합에 대한 이해가 많이 부족하기 때문에 중복 조합 을 이용해서 풀어보았다.
사실 중복 조합에 대한 개념과 알고리즘에 대해서는 이번 문제로 처음 접한 것 같다.
재귀함수를 이용해서 중복 조합 알고리즘을 만들어서 해결했는데 
중복 조합에 대해서 완벽하게 이해했다고 생각하지 않는다.
비슷한 문제를 여러 개 풀어봐야할 것 같다.

728x90
반응형
복사했습니다!