본문 바로가기

Programming/BOJ

[백준/C++] 6603번: 로또

 

1) 이건 test case 갯수를 입력으로 받지 않고 0이 나오면 끝나게 해야했다. 그 부분을 잘 몰랐는데 while문으로 구현하면 된다.

2) 조합을 만드는 문제는 탐색으로 풀면 된다. 1차원배열 탐색을 하면되고 dfs로 풀었다. 이전에 풀었던 알파벳문제와 유사했다.

3)종료조건: 6글자를 다 채웠을때 출력하고 return한다.

4)이 포스팅의 구현을 보고 따라했고 이전에 알파벳풀었을 때는 visit을 표시했던 것과 다르게 엄청 코드가 간단하다.... 하지만 어려워ㅠㅠㅠㅠ

#include<iostream>
using namespace std;

int num;
int lotto[14];
int ans[6];
void dfs(int start, int depth) {
	
	//종료조건
	if (depth == 6) {
		for (int i = 0; i < 6; i++) {
			cout << ans[i] << " ";
		}
		cout << endl;
		return;
	}

	//재귀: 재귀가 return 되면 다시 다음문자에 대해 dfs
	for (int i = start; i < num; i++) {
		ans[depth] = lotto[i];
		dfs(i + 1, depth+1);
	}

}
int main() {

	while (cin >> num && num) {
		for (int i = 0; i < num; i++) {
			cin >> lotto[i];
		}
		dfs(0, 0);
		cout << endl;
	}
	return 0;
}