※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 15610번 문제인 Abbey Courtyard이다.
문제는 아래 링크를 확인하자.

 

www.acmicpc.net/problem/6603

 

6603번: 로또

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

www.acmicpc.net

이 문제는 오름차순으로 주어진 숫자들 가운데 6개의 수를 고르는 경우의 수를 빠짐없이 나열하는 문제이다.

모든 경우를 나열해야하므로 가능한 모든 경우를 일일이 탐색하자.

recursion을 이용하면 간단히 구현할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <vector>
using std::vector;
using std::cin;
using std::cout;

int S[12];
bool visited[12];
vector<int> comb;
vector<int>::iterator iter;

void func(int x, int y) {
    if (comb.size() == 6) {
        for (iter = comb.begin();iter != comb.end();iter++) {
            cout << S[*iter] << ' ';
        }
        cout << '\n';
    }
    else {
        for (int i = y;i < x;i++) {
            if (!visited[i]) {
                visited[i] = true;
                comb.push_back(i);
                func(x,i+1);
                comb.pop_back();
                visited[i] = false;
            }
        }
    }
}

int main()
{
    int x;
    cin >> x;
    int y;
    while (x != 0) {
        for (int i = 0;i < x;i++) {
            cin >> y;
            S[i] = y;
        }
        func(x,0);
        cout << '\n';
        cin >> x;
    }
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 20494 // C++] 스시  (0) 2021.01.25
[BOJ 20493 // C++] 세상은 하나의 손수건  (0) 2021.01.24
[BOJ 15610 // C++] Abbey Courtyard  (0) 2021.01.22
[BOJ 1533 // C++] 길의 개수  (0) 2021.01.21
[BOJ 13328 // C++] Message Passing  (0) 2021.01.20

+ Recent posts