GitHubSeob

C++ / 백준 / 6603 / 로또 본문

Baekjoon/Silver

C++ / 백준 / 6603 / 로또

GitHubSeob 2021. 10. 3.

문제

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

 

6603번: 로또

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

www.acmicpc.net

문제풀이

다음칸을 선택, 선택하지 않는 경우인 두 경우를 나누어 DFS함수를 실행시킨다.

DFS함수의 인자는 현재 위치가 로또의 몇 번째 숫자인지를 idx, 몇 개를 선택했는지가 cnt이다.

6개만 고르면 되므로 cnt가 6일 때 answer에 담은 숫자들을 출력한다.

idx+1이 num보다 작을 때만 DFS함수를 실행하도록 하면 된다.

 

코드

#include <iostream>
#include <vector>
using namespace std;

int num;
vector<int>answer(6, 0);
vector<int>lotto;

void DFS(int idx, int cnt) {
	int idx2(0);
	if (cnt == 6) {
		for (idx2 = 0; idx2 < 6; ++idx2)
			cout << answer[idx2] << ' ';
		cout << '\n';
		return;
	}
	if (idx + 1 < num) {
		answer[cnt] = lotto[idx + 1];
		DFS(idx + 1, cnt + 1);
		DFS(idx + 1, cnt);
	}
}

int main() {
	int idx(0);
	while (1) {
		cin >> num;
		if (num == 0) break;
		lotto = vector<int>(num, 0);

		for (idx = 0; idx < num; ++idx)
			cin >> lotto[idx];

		answer[0] = lotto[0];
		DFS(0, 1);
		DFS(0, 0);
		cout << '\n';
	}
}

'Baekjoon > Silver' 카테고리의 다른 글

C++ / 백준 / 2003 / 수들의 합 2  (0) 2021.10.03
C++ / 백준 / 1182 / 부분수열의 합  (0) 2021.10.03
C++ / 백준 / 3184 / 양  (0) 2021.09.24
C++ / 백준 / 2251 / 물통  (0) 2021.09.18
C++ / 백준 / 1697 / 숨바꼭질  (0) 2021.09.12