백준/브루트 포스
(c++)백준 6603번: 로또
Nimgnoej
2020. 8. 10. 10:38
https://www.acmicpc.net/problem/6603
6603번: 로또
문제 독일 로또는 {1, 2, ..., 49}에서 수 6개를 고른다. 로또 번호를 선택하는데 사용되는 가장 유명한 전략은 49가지 수 중 k(k>6)개의 수를 골라 집합 S를 만든 다음 그 수만 가지고 번호를 선택하는
www.acmicpc.net
[풀이]
k개의 수로 구성된 집합 S에서 6개의 수를 고르는 모든 방법을 구하는 문제이다.
고르는 수는 중복되지 않고, 순서를 바꾸는 경우는 세지 않으므로 조합을 구하면 된다.
#include <iostream>
#include <vector>
using namespace std;
int k;
vector<int>S(13);//집합 S
bool check[50];//선택한 숫자 true
//조합 구하기
void getSet(int idx, int cnt) {
if (cnt == 6) {
for (int i = 1; i <= 49; i++) {
if (check[i] == true)
cout << i << ' ';
}
cout << '\n';
return;
}
for (int i = idx; i < k; i++) {
if (check[S[i]] == true)continue;
check[S[i]] = true;
getSet(i, cnt + 1);
check[S[i]] = false;
}
}
void solution() {
while (1) {
cin >> k;
//종료 조건
if (k == 0)
break;
for (int i = 0; i < k; i++) {
cin >> S[i];
}
getSet(0, 0);
cout << '\n';
}
}
int main() {
solution();
return 0;
}