하루하나코딩
백준 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개를 임의로 선택한다음에
그게 암호문 조건에 맞는지 확인하면 되는 문제였다.
재귀로 브루트 포스하는거 너무 어렵다 ㅜㅜ
다시 기초문제부터 닦아야겠다.