주어진 오름차순 수열을 가지고 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();
}
}
'알고리즘 > 분할정복 & 재귀 & 백트래킹' 카테고리의 다른 글
[백준] 1182 부분 수열의 합 (0) | 2023.05.15 |
---|---|
[백준] 1759 암호만들기 (0) | 2023.05.15 |
[백준] 1780 종이의 개수 (0) | 2023.05.04 |
[백준] 1992 쿼드 트리 (0) | 2023.05.04 |
[백준] 2630 색종이 만들기 (0) | 2023.05.04 |