알고리즘
조합 [DFS]
홍복치
2021. 3. 8. 21:46
인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다.
풀이
- nCr 조합 구하기
- for문이 s부터 n까지 돈다. => s~n-1까지 가지가 뻗는다.
[예시] 6C4의 첫번째 사이클
s=0 => 가지는 0부터 5까지 / L=0 => ch[0]=0;
s=1 => 가지는 1부터 5까지 / L=1 => ch[1]=1;
s=2 => 가지는 2부터 5까지 / L=2 => ch[2]=2;
s=3 => 가지는 3부터 5까지 / L=3 => ch[3]=3;
s=4 => L이 r과 같다(nCr에서 r만큼 뽑는다.) => 0, 1, 2, 3 출력
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n, r;
int ch[20];
//조합
void DFS(int s, int L){
if(L==r){
for(int j=0;j<L;j++){
cout<<ch[j]<<" ";
}
cout<<endl;
}else{
for(int i=s;i<n;i++){
ch[L]=i;
DFS(i+1, L+1);
}
}
}
int main(){
cin>>n>>r;
DFS(0,0);
return 0;
}