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

jw·2022년 2월 22일
0

백준

목록 보기
19/141

문제 설명

https://www.acmicpc.net/problem/4659
입력된 비밀번호가 발음할 수 있는지 아닌지 체크하는 문제다.
발음할 수 있는 비밀번호는 해당 조건을 따라야 한다.

  1. 모음(a,e,i,o,u) 하나를 반드시 포함하여야 한다.
  2. 모음이 3개 혹은 자음이 3개 연속으로 오면 안 된다.
  3. 같은 글자가 연속적으로 두번 오면 안되나, ee 와 oo는 허용한다.

이 조건이 만족하면 입력된 비밀번호 뒤에 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";
	}
}
profile
다시태어나고싶어요

0개의 댓글