문제 출처:https://www.acmicpc.net/problem/4659
문제 분석
해당 문제는 3가지 조건의 의거하여 발음할 수 있는지, 아닌지를 출력하는 문제입니다.
- 모음(a,e,i,o,u) 하나를 반드시 포함하여야 한다.
- 모음이 3개 혹은 자음이 3개 연속으로 오면 안 된다.
- 같은 글자가 연속적으로 두번 오면 안되나, ee 와 oo는 허용한다.
저는 이 문제를 아래 코드를 통해 해결했습니다. 코드는 다음과 같습니다:
#include <iostream>
using namespace std ;
int main(){
ios::sync_with_stdio(false) ;
cin.tie(NULL) ; cout.tie(NULL) ;
while(true){
string str ;
int vowel_cnt = 0, consonant_cnt = 0 ;
bool exist_vowel = false, answer = true ;
char prev = ' ' ;
cin >> str ;
if(str.compare("end") == 0)
break ;
for(auto c : str){
if(c != 'e' && c != 'o' && prev == c){
answer = false ;
break;
}
switch(c){
case 'a': case 'e': case 'i': case 'o': case 'u':
exist_vowel = true ;
vowel_cnt += 1 ;
consonant_cnt = 0 ;
break ;
default :
consonant_cnt += 1 ;
vowel_cnt = 0 ;
break ;
}
if(2 < vowel_cnt || 2 < consonant_cnt){
answer = false ;
break;
}
prev = c;
}
if(!exist_vowel)
answer = false ;
cout << "<" << str << "> is" << (answer ? " " : " not ") << "acceptable." << endl ;
}
return 0 ;
}
해당 문제는 Github에서도 보실 수 있습니다:
https://github.com/gurcks8989/CodingTest/blob/master/BackJoon/HPS/P4659_Pronounce_the_Password.cpp
훈수 및 조언은 언제든 환영입니다.