문제접근
•
입력 받은 알파벳을 정렬을 하여 순서대로 체크하기 편하게 한다.
•
모든 알파벳에 대해서 하나씩 대입을 해나간다
•
단, 두 개의 경우로 나누어서 생각을 해야한다(둘다 모두 체크를 해줘야함)
1.
들어갈 알파벳이 모음인 경우
2.
들어갈 알파벳이 자음인 경우
•
재귀를 탈때마다 정답으로 출력할 알파벳 길이를 체크하고 만족한다면, 모음 개수와 자음 개수도 조건을 만족하는지 체크하고 출력한다
놓쳤던 부분
코드
2016 KB
0 ms
#include <iostream>
#include <algorithm>
int l, c;
char input_arr[15];
char answer[15];
void input_setting()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
}
void input()
{
std::cin >> l >> c;
for (int i = 0; i < c; i++)
std::cin >> input_arr[i];
std::sort(input_arr, input_arr + c);
}
bool isVowel(int idx)
{
if (input_arr[idx] == 'a' || input_arr[idx] == 'e' || input_arr[idx] == 'i' || input_arr[idx] == 'o' || input_arr[idx] == 'u')
return (1);
return (0);
}
void solution(int answer_index, int pre_index, int vowel, int consonant)
{
if (answer_index == l)
{
if (vowel >= 1 && consonant >= 2)
{
for (int i = 0; i < l; i++)
std::cout << answer[i];
std::cout << "\n";
return ;
}
}
for (int i = pre_index + 1; i < c; i++)
{
answer[answer_index] = input_arr[i];
if (isVowel(i))
solution(answer_index + 1, i, vowel + 1, consonant);
else
solution(answer_index + 1, i, vowel, consonant + 1);
}
}
int main(void)
{
input_setting();
input();
solution(0, -1, 0, 0);
return (0);
}
C++
복사