반응형
개념
조합(Combination) : 순서 바뀜 허용 안함, 중복 허용 안함, nCr = n! / r! * (n-r)!
순열(Permutation) : 순서 바뀜 허용, 중복 허용 안함, nPr = nCr x r!
*순서 바뀜
ex) 1 1 2 & 1 2 1 --> Per 허용, Com 허용X
ex) {1,2,3}
조합(3C2): {1,2}, {2,3}, {3,1}
순열(3PC) : {1,2}, {2,1}, {2,3}, {3,2}, {3,1}, {1,3}
조합(3C2) : {1,2,3}
순열(3PC) : 3개의 우너소로 조합 가능한 모든 구성 : 3P3 (nPn = n!)
{1,2,3}, {1,3,2}, {2,1,3}, {2,3,1}, {3,1,2}, {3,2,1}
순열(Permutation)는 w=0
조합(Combination)은 w=num
단, 중복을 허용할 시 visit배열을 없애 준다.!!
코드
void Permutition(int ctttt, int num )
{
if(ctttt==3)
{
vector <int > ans;
for(int i = 0 ; i < vvvvv_.size() ; i++)
{
cout <<" " <<vvvvv_[i] ;
}
cout<< endl;
return ;
}
//permu는 w=0
for(int w= 0 ; w<5 ;w ++)
{
if(!vii[w])
{ vii[w]=true;
vvvvv_.push_back(ex_Num[w]); //0
Permutition(ctttt+1,w);
vvvvv_.pop_back();
vii[w] =false;
}
}
}
void Combination(int ctttt, int num )
{
if(ctttt==3)
{
vector <int > ans;
for(int i = 0 ; i < vvvvv_.size() ; i++)
{
cout <<" " <<vvvvv_[i] ;
}
cout<< endl;
return ;
}
//combi는 w=num
for(int w= num ; w<5 ;w ++)
{
if(!vii[w])
{ vii[w]=true;
vvvvv_.push_back(ex_Num[w]); //0
Combination(ctttt+1,w);
vvvvv_.pop_back();
vii[w] =false;
}
}
}
반응형
'Algorithm > Algorithm_Tip' 카테고리의 다른 글
[Java 입출력] StringTokenizer (0) | 2020.09.08 |
---|---|
[JAVA 입력 TIP] (0) | 2020.09.08 |
[입력] getline으로 한 줄 띄어쓰기 까지 다 받아오기 (0) | 2020.08.06 |
[탐색] 이분탐색 lower_bound, upper_bound (0) | 2020.07.21 |
입력 팁 (0) | 2020.06.28 |