DFS를 이용하여 조합을 생성해 출력하는 문제
이와 비슷한 문제도 여럿 존재 하지만 문제 제목이 끌렸다.
최대 숫자가 13개 이기에 DFS로 해도 시간이 100ms 이내로 나온다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void dfs(const vector<int> num, int n, int pos, bool checker[13])
{
if (n == 6)
{
for (int i = 0; i < num.size(); i++)
if (checker[i])
cout << num[i] << " ";
cout << endl;
return;
}
else if (n > 6 || pos == num.size())
return;
checker[pos] = true;
dfs(num, n+1, pos + 1, checker);
checker[pos] = false;
dfs(num, n, pos + 1, checker);
}
int main()
{
int k;
cin >> k;
while (k != 0)
{
vector<int> num(k);
for (int i = 0; i < k; i++)
cin >> num[i];
bool checker[13];
fill_n(checker, k, false);
dfs(num, 0, 0, checker);
cout << '\n';
cin >> k;
}
return 0;
}
2019-01-05 03:42:40에 Tistory에서 작성되었습니다.