[c++] 백준 4659, 비밀번호 발음하기

김현섭·2023년 7월 20일
1

[C++] 백준

목록 보기
18/36
post-custom-banner

백준 4659

🌲 문제 요약

높은 품질을 가진 비밀번호의 조건이 주어질 때, 입력받은 패스워드의 품질을 평가하는 문제.

🌲 문제 풀이

입력받은 각각의 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;
}
profile
오롯이 밤길을 달래는 별에게로
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

아주 유익한 내용이네요!

답글 달기