알고리즘 문제
[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");
}
}