알고리즘/분할정복 & 재귀 & 백트래킹

[백준] 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();
    }
    
}