문제 바로가기> 백준 5568번: 카드 놓기
중복을 방지하기 위해 조합을 사용하였고, 재귀를 이용한 brueforce방식으로 문제를 풀이하였다.
#include<iostream>
#include<set>
using namespace std;
int n, k;
int card[11]={};
bool visit[11]={false};
set<string> s;
void backtracking(int index, string numStr){
if(index==k){
s.insert(numStr);
return;
}
for(int i=0; i<n; i++){
if(visit[i]==false){
visit[i] = true;
backtracking(index+1, numStr+to_string(card[i]));
visit[i] = false;
}
}
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(NULL);
cin>>n>>k;
for(int i=0; i<n; i++) cin>>card[i];
backtracking(0, "");
cout << s.size();
}