적용한 알고리즘 : 재귀

 

아이디어 : X

 

생각의 흐름 / 절차 : X

 

교훈 / 생각했던 점들 / 복기 :

뽑을 때 뽑지 않을 때를 각각 구분해서 재귀를 돌리자.

재귀는 사전 순을 나타낼 때 괜찮은 방법이다.

재귀가 약하니까 몇 문제 더 해봅시다.

 

<코드>

#include <cstdio>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;

vector<int> lotto;

void solve(vector<int> &a, int index, int cnt){
    if (cnt == 6){
        for (int num : lotto){
            printf("%d ", num);
        }
        printf("\n");
        return;
    }

    int n = a.size();
    if (n == index) return;

    //index 번째 고름
    lotto.push_back(a[index]);
    solve(a, index + 1, cnt + 1);

    //index 번째 안고름
    lotto.pop_back();
    solve(a, index + 1, cnt);
}
int main(){
    while (true){
        int n;
        scanf("%d", &n);
        if (n == 0){
            return 0;
        }

        vector<int> a(n);
        for (int i = 0; i < n; i++){
            scanf("%d", &a[i]);
        }

        solve(a, 0, 0);
        printf("\n");
    }
}

'Algorithm > BOJ' 카테고리의 다른 글

[백준] 14500번 테트리미노  (126) 2019.11.08
[백준] 15658번 연산자 끼워넣기 (2)  (124) 2019.11.08
[백준] 14888번 연산자 끼워넣기  (124) 2019.11.08
[백준] 14225번 부분수열의 합  (0) 2019.11.08
[백준] 1182번 부분수열의 합  (0) 2019.11.08

+ Recent posts