반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

코딩하기 좋은날

백준 5568 카드 놓기 본문

백준(Baekjoon) 문제

백준 5568 카드 놓기

huiung 2019. 1. 31. 14:27
반응형

문제와 채점은 위 사이트에서 확인 하실 수 있습니다

 

이 문제는 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