하루하나코딩

백준 1759 : 암호만들기 c++

HAHAKO 2023. 3. 6. 20:07

코드

#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;

int l, c;
char text[16];
bool visit[16];

void check(){
	char str[16];
	int chk = 0, a = 0;
	
	for(int i = 0 ; i < c; i++){
		if(visit[i] == true){
			str[a] = text[i];
			a++;
			if(text[i] == 'a'|| text[i] == 'e'|| text[i] == 'i'|| text[i] == 'o'|| text[i] == 'u')
			chk++;
		}
	}
	str[l] = '\0';
	if(chk && l - chk >= 2) cout << str << "\n";
}

void select(int a, int cnt){
	if(cnt == l){
		check();
		return;
	}
	
	if(a == c) return;
	visit[a] = true;
	select(a+1, cnt+1);
	
	visit[a] = false;
	select(a+1, cnt);
	
	return;	
}

int main(){
	
	cin >> l >> c;
	
	for(int i = 0; i < c; i++){
		cin >> text[i];
	}
	sort(text, text+c);
	
	for(int i = 0; i <= c-l; i++){
		memset(visit, 0, sizeof(visit));
		visit[i] = true;
		select(i+1, 1);
	}
	 
}

알게된 점

브루트포스로 4개를 임의로 선택한다음에

그게 암호문 조건에 맞는지 확인하면 되는 문제였다.

재귀로 브루트 포스하는거 너무 어렵다 ㅜㅜ

다시 기초문제부터 닦아야겠다.