알고리즘/분할정복 & 재귀 & 백트래킹
[백준] 6603 로또
HJ39
2023. 5. 15. 01:46
주어진 오름차순 수열을 가지고 6개의 숫자를 뽑아 출력하는 문제이다.
백트래킹을 활용하면 문제를 쉽게 해결할 수 있다.
#include <bits/stdc++.h>
using namespace std;
vector<int> input6603;
vector<bool> check6603(14,false);
vector<int> result6603;
int K6603;
void backback6603(int count, int pos){
if(count == 6){
for(auto& i: result6603){
cout<<i<<" ";
}
cout<<"\n";
return;
}
for(int i=pos; i<K6603; ++i){
if(!check6603[i]){
check6603[i] = true;
result6603.push_back(input6603[i]);
backback6603(count+1, i+1);
result6603.pop_back();
check6603[i] = false;
}
}
}
void lottie6603(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
while (true) {
cin>>K6603;
if(K6603==0)
return;
for(int i=0;i<K6603; ++i){
int input; cin>>input;
input6603.push_back(input);
}
backback6603(0, 0);
cout<<"\n";
fill(check6603.begin(), check6603.end(), false);
input6603.clear();
result6603.clear();
}
}