- 모음( a, e, i, o, u ) 하나 이상 반드시 포함.
- 모음이 3개 혹은 자음이 3개 연속으로 오면 안됨.
- 같은 글자가 연속적으로 두번 오면 안되나, ee, oo 는 허용
[ 입력 ]
- 입력은 "end" 문자열을 입력하기 전까지 계속해서 testcase 입력.
- 각 testcase 는 한줄로 이루어져 있으며, test 할 비밀번호 입력.
- 각 비밀번호는 한글자 이상 20글자 이하의 문자열이며, 대문자 포함 x
[ 출력 ]
- 각 testcase 를 "예제출력" 형태에 기반하여 품질 평가 출력.
=> 조건에 만족하는 비밀번호 : "<비밀번호> is acceptable."
=> 조건에 만족하지않는 비밀번호 : "<비밀번호> is not acceptable."
나는 문제에서 주어진 각 조건을 확인하는 함수를 하나씩 만들어 3가지 조건이 모두 true 인 경우 조건에 만족, 하나라도 false 인 경우 조건에 만족하지 않는다 판별해 출력해주었다.
모음에 따라 조건을 판별하는 경우가 많으므로 모음 5가지 저장되어있는 char 배열 하나 선언해서 이 각각과 비교해 조건을 판별해주었다.
#include <iostream>
#include <string>
char vowels[5] = {'a', 'e', 'i', 'o', 'u'};
// case1
bool check_include_vowel(std::string s) {
for(int i = 0; i < s.size(); i++) {
for(int j = 0; j < 5; j++) {
bool found = s[i] == vowels[j];
if (found) {
return true;
}
}
}
return false;
}
// case2
bool check_conti_three_letters(std::string s) {
int v_count = 0; // the number of consecutive vowels
int c_count = 0; // the number of consecutive consonants
for(int i = 0; i < s.size(); i++) {
bool exist = false;
for(int j = 0; j < 5; j++) {
exist = (s[i] == vowels[j]);
if(exist) {
v_count += 1;
c_count = 0;
break;
}
}
// not exist vowel
if(!exist) {
v_count = 0;
c_count += 1;
}
// terminate condition
if(v_count >= 3 || c_count >= 3) {
return false;
}
}
return true;
}
// case3
bool check_conti_two_letters(std::string s) {
int count = 1;
char prev_letter = s[0];
for(int i = 1; i < s.size(); i++) {
// terminate condition
if(prev_letter == s[i] && prev_letter != 'e' && prev_letter != 'o') {
return false;
}
prev_letter = s[i];
count = 1;
}
return true;
}
void print_result(bool total_condition, std::string s) {
if (total_condition) {
std::cout << "<" << s << "> is acceptable." << std::endl;
} else {
std::cout << "<" << s << "> is not acceptable." << std::endl;
}
}
int main() {
std::string input = "";
while(true) {
std::cin >> input;
if(input.compare("end") == 0) {
break;
}
bool case1 = check_include_vowel(input);
bool case2 = check_conti_three_letters(input);
bool case3 = check_conti_two_letters(input);
bool total_cond = case1 && case2 && case3;
print_result(total_cond, input);
}
return 0;
}