높은 품질을 가진 비밀번호의 조건이 주어질 때, 입력받은 패스워드의 품질을 평가하는 문제.
입력받은 각각의 s
를 한 글자씩 검사한다. 만약 s[i]
의 모음 자음 여부를 판별하는 check
함수가 true를 반환한다면, 연속된 모음의 개수를 가리키는 변수 a
를 1만큼 증가시키고, 연속된 자음의 개수를 가리키는 변수 b
를 0으로 초기화한다. 추가로 모음을 포함한 경우이므로, including
에는 1을 저장한다. 반대의 경우에는 a
를 초기화하고 b
를 증가시킨다.
a
또는 b
가 3이 되거나, e 와 o를 제외한 같은 글자가 두 번 연달아 나오는 경우, flag
에 1을 저장한다.
반복문을 빠져나온 이후엔 flag
의 값에 따른 정해진 문장을 출력한다.
각각의 조건에 따라 정확하게 식을 세울 필요가 있다.
#include <bits/stdc++.h>
using namespace std;
bool check(char c) {
return (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u');
}
int main() {
while (1) {
string s;
cin >> s;
if (s == "end") break;
int including = 0, flag = 0;
int a = 0, b = 0;
char prev = -1;
for (int i = 0; i < s.size(); i++) {
if (check(s[i])) {
including = 1;
a++; b = 0;
}
else {
a = 0; b++;
}
if (a == 3 || b == 3) flag = 1;
else if (s[i] == prev && s[i] != 'e' && s[i] != 'o') flag = 1;
prev = s[i];
}
if (!including) flag = 1;
if (flag) cout << '<' << s << '>' << " is not acceptable.\n";
else cout << '<' << s << '>' << " is acceptable.\n";
}
return 0;
}
아주 유익한 내용이네요!