알고리즘 문제

[C/C++ 백준 6603번] 로또 (Silver 2)

새파란 공대생 2020. 9. 5. 09:19

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

 

6603번: 로또

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

www.acmicpc.net

저번 문제와 거의 유사한 DFS 문제이다. 함수 안에 시작점을 추가로 매개변수로 넣어서 사전 순으로 출력하는게 관건이다.

 

#include <cstdio>
int N, S[13], arr[6];
bool visited[13]={0,};
void func(int cnt, int start){
	if(cnt == 6){
		for(int i=0; i<6; i++)
			printf("%d ",arr[i]);
		printf("\n");
	}
	for(int i=start; i<N; i++){
		if(!visited[i]){
			visited[i] = true;
			arr[cnt] = S[i];
			func(cnt+1, i+1);
			visited[i] = false;
		}
	}
}
int main(void){
	while(1){
		scanf("%d", &N);
		if(N==0)
			break;
		for(int i=0; i<N; i++)
			scanf("%d", &S[i]);	
		func(0, 0);
		printf("\n");
	}
}