[백준/BOJ] 백준 1759번 : 암호 만들기
2021. 2. 28. 19:34ㆍ알고리즘 문제풀이
Solve(int before_select, int mo, int ja, string maked)함수(before_select:이전에 확인한 인덱스, mo:모음의 개수, ja:자음의 개수, maked:만들어지는 문자열)를 통해 문자열을 만들어 가며 길이가 L인 문자열이 만들어졌을 때 모음, 자음 조건을 만족했는지 확인하여 문제를 해결했다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int L, C;
vector<char> temp;
vector<string> result;
//before_select:이전에 확인한 인덱스, mo:모음의 개수, ja:자음의 개수, maked:만들어지는 문자열
void Solve(int before_select, int mo, int ja, string maked)
{
if (maked.size() == L)
{
if (mo >= 1 && ja >= 2) //모음, 자음 조건을 만족했을때
result.push_back(maked);
else
return;
}
for (int i = before_select + 1; i < temp.size(); i++)
{
char this_char = temp[i];
//모음일때
if (this_char == 'a' || this_char == 'e' || this_char == 'i' || this_char == 'o' || this_char == 'u')
{
Solve(i, mo + 1, ja, maked + this_char);
}
//자음일때
else
{
Solve(i, mo, ja + 1, maked + this_char);
}
}
}
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> L >> C;
for (int i = 0; i < C; i++)
{
char input;
cin >> input;
temp.push_back(input);
}
//알파벳이 암호에서 증가하는 순서로 배열되어 있으므로 정렬한다
sort(temp.begin(), temp.end());
Solve(-1, 0, 0, "");
for (int i = 0; i < result.size(); i++)
cout << result[i] << "\n";
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 1949번 : 우수 마을 (0) | 2021.02.28 |
---|---|
[백준/BOJ] 백준 16681번 : 등산 (0) | 2021.02.28 |
[백준/BOJ] 백준 12904번 : A와 B (0) | 2021.02.28 |
[백준/BOJ] 백준 12865번 : 평범한 배낭 (0) | 2021.02.28 |
[백준/BOJ] 백준 2922번 : 즐거운 단어 (0) | 2021.02.19 |