6603번 - 로또 #조합론

esc247·2022년 8월 11일
0

Algorithm

목록 보기
9/11



6603번 로또

  • 주어진 k개의 수에서 중복하지 않고 6개를 골라 출력하는 문제.

    즉 kC6개 경우를 출력하는 문제이다.

  • 조합은 dfs로 재귀적으로 구하거나, next_permutation 사용해서 구할 수 있다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    while (1)
    {
        int k;
        cin >> k;
        if (k == 0)	//입력 0이면 중단.
            break;
        vector<int> v;
        for (int i = 0; i < k; i++)
        {
            int tmp;
            cin >> tmp;
            v.push_back(tmp);
        }
        vector<bool> comb(6, true);
        for (int i = 0; i < k - 6; i++)
            comb.push_back(false);
        do
        {
            for (int i = 0; i < k; i++)	//여기서 i를 6까지로 실수, 
            //true의 개수가 k개 중 6개이므로 전체 다 돌아야 한다.
            {
                if (comb[i])
                    cout << v[i] << ' ';
            }
            cout << '\n';
        } while (prev_permutation(comb.begin(), comb.end()));
        cout << '\n';
    }
}
profile
막상 하면 모르니까 일단 하자.

0개의 댓글