โท ๋ฌธ์ ์ค๋ช
์ฃผ์ด์ง ์ํธ๋ฅผ ๋ง๋ค ์ ์๋ ๋ฌธ์์ด L ๊ฐ์์ C๊ฐ๋ฅผ ๊ณจ๋ผ์(์์ด) ์ค๋ฆ์ฐจ์์ผ๋ก ์ถ๋ ฅํ๋ ๋ฌธ์ .
๋จ, ์ํธ๋ ๋ชจ์์ ๊ฐ์๋ 1๊ฐ ์ด์์ด๊ณ ์์์ ๊ฐ์๋ 2๊ฐ ์ด์์ธ ๋ฌธ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
โท ๋ฌธ์ ํ์ด
์์ด๋ฌธ์ ์ด๋ฏ๋ก ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ DFS ๋ฐฉ๋ฒ์ผ๋ก ํ์ดํ ์ ์์ต๋๋ค.
[ ๋ณ์ ์ค๋ช ]
vector<char> alpha; ์ํ๋ฒณ์ ๊ฐ์๋งํผ ์ฝ๊ฒ ์ ๋ ฅ๋ฐ๊ธฐ ์ํด vector ์๋ฃ๊ตฌ์กฐ ์ฌ์ฉ(๋์ ํ ๋น)
string answer_arr = ""; ์ ๋ต ์ถ๋ ฅ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด string ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฒ์ ์ถ๋ ฅํ์ต๋๋ค.
[ ์๊ณ ๋ฆฌ์ฆ ์ค๋ช ]
๋ฌธ์ ์์ ์ฃผ์ด์ง ์ํ๋ฒณ์ ๊ธธ์ด ๋ด์์ ์ ํํ ์ ์๋ ๊ธธ์ด๊น์ง ์ฌ๊ทํจ์๋ก ํ์ํฉ๋๋ค.
์ฌ๊ทํจ์๋ ๋๊ฐ์ง ๊ฒฝ์ฐ์ ์๋ก ๋๋ ์ ํ์ํฉ๋๋ค.
โ ํ์ฌ ์ธ๋ฑ์ค์ ์ํ๋ฒณ์ ์ ํํ๋ ๊ฒฝ์ฐ
โก ํ์ฌ ์ธ๋ฑ์ค์ ์ํ๋ฒณ์ ์ ํํ์ง ์๋ ๊ฒฝ์ฐ
์ฆ, ์ฒซ๋ฒ์งธ ๋ฌธ์๋ถํฐ ์ ํํ ์ ์๋ ์ํ๋ฒณ์ ๊ฐ์๊น์ง ์ ํํ๊ณ (1๋ฒ ๊ฒฝ์ฐ)
์ฌ๊ทํจ์๋ฅผ ๋ฐํํด์๋ 2๋ฒ์ ๊ฒฝ์ฐ๋ก ํ์ํฉ๋๋ค.
์ด ๋, ํ์ํ ๋๋ง๋ค ์ ํํ ๋ฌธ์ ์ ์กฐ๊ฑด์ด ๋ง๋์ง ํ์ธํ๊ณ ๋ง๋ค๋ฉด ๊ทธ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
โท ์๊ฐ๋ณต์ก๋
์ ์ค๋ช ์์ ์ ์ 2๊ฐ์ง ๊ฒฝ์ฐ์ ์๋ฅผ ์ํ๋ฒณ์ ๊ธธ์ด๋งํผ ์ฌ๊ทํจ์๋ก ๋ฐ๋ณตํ๋ฏ๋ก
O(2^N)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
โท ์ฝ๋
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
void findPassword(int, string, vector<char>&, int);
bool countMoumJaum(string&);
int main() {
int length, count;
vector<char> alpha;
string answer_arr = "";
cin >> length >> count;
for (int i = 0; i < count; i++) {
char x;
cin >> x;
alpha.push_back(x); // a t c i s w
}
sort(alpha.begin(), alpha.end()); // a c i s t w
findPassword(length, answer_arr, alpha, 0);
}
void findPassword(int length, string answer, vector<char> &alpha, int alpha_index) {
if (answer.length() == length && countMoumJaum(answer)) {
cout << answer << "\n";
return;
}
if (alpha_index >= alpha.size()) return;
findPassword(length, answer + alpha[alpha_index], alpha, alpha_index+1);
findPassword(length, answer, alpha, alpha_index+1);
}
bool countMoumJaum(string &answer) {
int moum_count = 0, jaum_count = 0;
for (char x : answer) {
(x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u') ? moum_count += 1 : jaum_count += 1;
}
return moum_count >= 1 && jaum_count >= 2;
}