본문 바로가기
백준

[백준 6603] 로또, C++

by 황인태(intaehwang) 2020. 1. 7.
반응형

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

 

6603번: 로또

문제 독일 로또는 {1, 2, ..., 49}에서 수 6개를 고른다. 로또 번호를 선택하는데 사용되는 가장 유명한 전략은 49가지 수 중 k(k>6)개의 수를 골라 집합 S를 만든 다음 그 수만 가지고 번호를 선택하는 것이다. 예를 들어, k=8, S={1,2,3,5,8,13,21,34}인 경우 이 집합 S에서 수를 고를 수 있는 경우의 수는 총 28가지이다. ([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2

www.acmicpc.net

 본 문제는 University of Ulm Local Contest 1996 F번 문제다. 모든 경우의 수를 출력해야 하고, 오름차순으로 정렬해야 한다. 그렇기 때문에 next_permutation을 사용하면 쉽게 해결할 수 있다.

  1. n개의 숫자 중, 6개만 선택하기
  2. next_permutation으로 모든 경우의 수 구하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <cstdio>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main() {
    while (true) {
        vector<int> v;
        vector<int> chk(60);
        int n;
        scanf("%d"&n);
        if (n == 0return 0;
        for (int i = 0; i < n; i++) {
            int tmp;
            scanf("%d"&tmp);
            v.push_back(tmp);
        }
        // n개의 숫자 중, 6개만 선택
        for (int i = 0; i < n-6; i++) {
            chk.push_back(1);
        }
        // 모든 경우의 수 출력
        do {
            for (int i = 0; i < chk.size(); i++) {
                if (chk[i] == 0) {
                    printf("%d", v[i]);
                    if (i != chk.size()-1printf(" ");
                }               
            }
            printf("\n");
        } while (next_permutation(chk.begin(), chk.end()));
        printf("\n");                 
    }
    return 0;
}
cs

 

 

반응형

'백준' 카테고리의 다른 글

[백준] 7569 - 토마토, C++  (0) 2020.01.08
[백준 2468] 안전 영역, C++  (0) 2020.01.07
[백준] 2583 - 영역 구하기, C++  (0) 2020.01.07
[백준] 11403 - 경로 찾기, C++  (0) 2020.01.07
[백준] 1697 - 숨바꼭질, C++  (0) 2020.01.06
Buy me a coffeeBuy me a coffee

댓글