문제풀이/백준

6603 - 로또

동바리 2023. 1. 3. 16:36

 

#include <iostream>
#include <algorithm>
#include <array>
using namespace std;

int element_cnt;
const int lotto_cnt = 6;
array<int, 49 + 1> input_array;

void remark(const int idx, int check_cnt, array<int, lotto_cnt>& lotto)
{
    if (lotto_cnt == check_cnt) {
		for (const auto& i : lotto) {
            cout << i << ' ';
        }

        cout << '\n';
        return;
    }

    for (int i = idx; i <= element_cnt; i++) {
        lotto[check_cnt] = input_array[i];
        remark(i + 1, check_cnt + 1, lotto);
    }
}

int main(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    while (true) {
        cin >> element_cnt;
        if (!element_cnt) {
            break;
        }

        for (int i = 1; i <= element_cnt; i++) {
            int input_cnt;
            cin >> input_cnt;
            input_array[i] = input_cnt;
        }

        const int check_cnt = 0;
        array<int, lotto_cnt> lotto{ 0, };
        remark(1, check_cnt, lotto);

        cout << '\n';
    }

    return 0;
}

https://www.acmicpc.net/problem/6603

 

6603번: 로또

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로

www.acmicpc.net

재귀함수를 이용해 풀 수 있는 전형적인 문제였습니다.