로또는 {1, 2, ..., 49}에서 수 6개를 고른다. 로또 번호를 선택하는데 사용되는 가장 유명한 전략은 49가지 수 중 k(k>6)개의 수를 골라 집합 S를 만든 다음 그 수만 가지고 번호를 선택하는 것이다. 집합 S와 k가 주어졌을 때, 수를 고르는 모든 방법을 구하는 프로그램을 작성하시오.
#include <iostream>
#include <vector>
using namespace std;
static int k;
static vector<int> lotto(13, 0); // 사용자로부터 입력받는 수열
static vector<int> comb(6, 0); // 만들어지는 로또번호 조합
void solve(int startIdx, int depth) {
if (depth == 6) { // [기저] - 6개의 조합이 만들어졌다면 출력 후 return.
for (int i = 0; i < 6; ++i) cout << comb[i] << " ";
cout << '\n';
return;
} // 0~k-1 / 1~k-1 / ... / k-1 모든 경우의 수를 따져본다.
for (int i = startIdx; i < k; ++i) {
comb[depth] = lotto[i]; // 숫자 하나 할당하고
solve(i + 1, depth + 1); // 다음 깊이(depth)로 이동
}
}
int main() {
ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
while (true) {
cin >> k; if (k == 0) break;
for (int i = 0; i < k; ++i) cin >> lotto[i];
solve(0, 0);
cout << '\n';
}
}