본문 바로가기

프로그래밍/백준

[C언어/브루트포스(DFS)] 1759 : 암호 만들기

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char arr[20];
int visit[20]={0};
int L, C;
int compare(const void* a, const void* b) {
	return *(char*)a-*(char*)b;
}

void check(){
	int chk=0,idx=0;
	char str[16];
	
	for(int i=0;i<C;i++){
		if(visit[i]){
			str[idx]=arr[i];
			idx++;
			if(arr[i]=='a'||arr[i]=='e'||arr[i]=='i'||arr[i]=='o'||arr[i]=='u')
				chk++;
		}
	}
	str[L]='\0';
	
	if(chk>=1&&L-chk>=2)
		printf("%s\n",str);
}
void select(int idx,int cnt){
	if(cnt==L){
		check();
		return;
	}
	
	if(idx==C)
		return;
	
	visit[idx]=1;
	select(idx+1,cnt+1);
	
	visit[idx]=0;
	select(idx+1,cnt);
}

int main(void) {
	scanf("%d %d", &L, &C);

	getchar();
	for (int i = 0; i < C; i++) {
		arr[i]=getchar();
		getchar();
	}

	qsort(arr, C, sizeof(char), compare);
	
	for(int i=0;i<=C-L;i++){
		memset(visit,0,sizeof(visit));
		visit[i]=1;
		select(i+1,1);
	}
	
	return 0;
}