시간 2시간? 좀 넘게 썻는데 못풀었다..
밑에 코드 보면서 또 한수 배운다.
for (int i = 0; i < s.size(); ++i)
{
int idx = s[i];
if (IsMoeum(idx)) ++lcnt, vcnt = 0, is_include_v = 1;
else vcnt++, lcnt = 0;
if (vcnt == 3 || lcnt == 3) flag = 1;
if (i >= 1 && (prev == idx) && (idx != 'e' && idx != 'o')) flag = 1;
prev = idx;
}
이부분 코드가 딱 알맞은거같다.
자음이나 모음은 3글자 이상 연속하지 못하고 두자리 연속하는 경우 'e'. 'o'만 딱 걸리내게 함.
뒤에 if, if문 두개가
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
#define endl "\n"
string s;
int lcnt, vcnt;
bool IsMoeum(int idx)
{
return (idx == 'a' || idx == 'e' || idx == 'i' || idx == 'o' || idx == 'u');
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
while (1)
{
cin >> s; if (s == "end") break;
lcnt = vcnt = 0;
bool flag = 0;
bool is_include_v = 0;
int prev = -1;
for (int i = 0; i < s.size(); ++i)
{
int idx = s[i];
if (IsMoeum(idx)) ++lcnt, vcnt = 0, is_include_v = 1;
else vcnt++, lcnt = 0;
if (vcnt == 3 || lcnt == 3) flag = 1;
if (i >= 1 && (prev == idx) && (idx != 'e' && idx != 'o')) flag = 1;
prev = idx;
}
if (is_include_v == 0) flag = 1;
if (flag) cout << "<" << s << ">" << " is not acceptable." << endl;
else
cout << "<" << s << ">" << " is acceptable." << endl;
}
return 0;
}