문제
https://www.acmicpc.net/problem/1759
풀이과정
문제에서 만들어야 될 암호의 길이와 사용할 수 있는 알파벳의 종류가 주어진다.
입력으로 주어지는 사용할 수 있는 알파벳들을 배열로 저장하였고, 그 배열의 인덱스를 하나씩 늘려가며 사용할지 안할지 결정해 암호를 만드는 recursion 함수를 구현했다.
소스코드의 주석을 보면 이해하기가 쉽다.
소스코드
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool chk(string &password)
{
int ja = 0, mo = 0;
int length = password.length();
for (int i = 0; i < length; i++)
{
char c = password[i];
if (c == 'a' || c == 'i' || c == 'o' || c == 'u' || c == 'e')
mo += 1;
else ja += 1;
}
return ja >= 2 && mo >= 1;
}
void recur(int n, vector<char> &alpha, string password, int i)
{
if (password.length() == n)
{
if (chk(password))
{
cout << password << "\n";
}
return;
}
if (i >= alpha.size()) return;
recur(n, alpha, password + alpha[i], i + 1);
recur(n, alpha, password, i + 1);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int L, C;
cin >> L >> C;
vector<char> alpha(C);
for (int i = 0; i < C; i++)
{
cin >> alpha[i];
}
sort(alpha.begin(), alpha.end());
recur(L, alpha, "", 0);
return 0;
}