
https://www.acmicpc.net/problem/4659
입력된 비밀번호가 발음할 수 있는지 아닌지 체크하는 문제다.
발음할 수 있는 비밀번호는 해당 조건을 따라야 한다.
이 조건이 만족하면 입력된 비밀번호 뒤에 is acceptable. 만족하지 않으면 is not acceptable.를 붙여서 출력한다.
end가 입력되면 종료된다.
3가지 조건을 차례대로 침착하게 if else문과 flag로 걸러가면 된다.
mflag: 모음이 하나라도 입력되면 0으로 세팅 (0->acceptable)
mcnt: 연속된 모음 cnt
jcnt: 연속된 자음 cnt
입력된 문자열 s을 for문을 돌리면서
모음이 입력되면 mcnt++, jcnt=0
자음이 입력되면 jcnt++, mcnt=0
mcnt 또는 jcnt가 3이되면 2번 조건에 어긋나서 break
두번째 문자부터는 바로 직전 글자와 같은지 체크하고
만약 두 문자가 같으면서 e나 o가 아니면
3번 조건에 어긋나서 break
#include<iostream>
#include<string>
using namespace std;
int a[30],mcnt,jcnt,mflag,flag;
int main() {
string s;
while (1) {
cin >> s;
if (s == "end")break;
mcnt = 0, jcnt = 0, mflag = 1, flag = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u')
mcnt++, jcnt = 0,mflag=0;
else jcnt++, mcnt = 0;
if (mcnt == 3 || jcnt == 3) {
flag = 1;
break;
}
if (i >= 1) {
if (s[i - 1] == s[i] && (s[i] != 'e' && s[i] != 'o')) {
flag = 1;
break;
}
}
}
if (flag == 0 && mflag == 0) {
cout << "<" << s << ">" << " is acceptable.\n";
}
else cout << "<" << s << ">" << " is not acceptable.\n";
}
}