코딩하기 좋은날
백준 5568 카드 놓기 본문
반응형
문제와 채점은 위 사이트에서 확인 하실 수 있습니다
이 문제는 n개의 카드중 k개를 뽑아서 만들 수 있는 숫자의 개수를 구하는 문제입니다.
저는 이 문제를 findfunc이라는 함수를 만들어 한장씩 뽑아서 재귀호출로 덧붙이는 방법으로 해결을 하였습니다.
벡터를 하나두어 현재 까지 사용한 카드의 인덱스를 1로 바꿔주어 중복으로 사용 할 수 없도록 하면 모든 경우를 구할 수 있습니다.
다음은 코드입니다.
#include <iostream>
#include <set>
#include <vector>
using namespace std;
string str[11];
set<string> s;
vector<int> v;
void findfunc(int i,int k, int n, string str2) {
if(k == 0) {
str2 += str[i];
s.insert(str2);
return;
}
str2 += str[i];
v[i] = 1;
k--;
for(int j = 0; j < n; j++) {
if(v[j])
continue;
findfunc(j, k, n, str2);
v[j] = 0;
}
}
int main(void) {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int k,n;
string str2;
cin >> n >> k;
for(int i = 0; i < n; i++) {
cin >> str[i];
}
for(int i = 0; i < n; i++) {
v.assign(11,0);
str2 = "";
findfunc(i, k-1, n, str2);
v.clear();
}
cout<<s.size();
return 0;
}
반응형
'백준(Baekjoon) 문제' 카테고리의 다른 글
백준 1747 소수&팰린드롬 (0) | 2019.02.02 |
---|---|
백준 1644 소수의 연속합 (0) | 2019.02.02 |
백준 2896 무알콜 칵테일 (0) | 2019.01.29 |
백준 2909 캔디 구매 (0) | 2019.01.29 |
백준 1002번 터렛 (0) | 2019.01.29 |