해결된 질문
작성
·
20
0
다음 코드의 문제가 뭔지 도통 모르겠어서 질문드립니다
#include<bits/stdc++.h>
using namespace std;
string s;
bool flag;
int cnt;
bool isVowl(char c){
return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}
int main(){
cin >> s;
while(true){
cnt = 1;
flag = 0;
if(s == "end") break;
if(s.find("a") == string::npos && s.find("e") == string::npos && s.find("i") == string::npos && s.find("o") == string::npos && s.find("u") == string::npos) {
flag = 1;
break;
};
for(int i = 1; i < s.size(); i++){
char prev = s[i - 1];
if(prev != 'e' && prev != 'o' && prev == s[i]){
flag = 1;
break;
}
if(isVowl(prev) && isVowl(s[i])) cnt++;
else if(!isVowl(prev) && !isVowl(s[i])) cnt++;
else cnt = 0;
if(cnt == 3) {
flag = 1;
break;
}
}
if(flag) cout << '<' << s << "> is not acceptable.\n";
else cout << '<' << s << "> is acceptable.\n";
cin >> s;
}
return 0;
}
답변 1
0
안녕하세요 충현님 ㅎㅎ
혹시 해당 문제해설 강의보시고도 이해가 안되시나요?
그리고 해당 코드는 제 코드가 아닌데요. ㅎㅎ
제 코드 기반으로 다시 주석을 달아 설명을 드리면 다음과 같습니다.
#include <bits/stdc++.h>
using namespace std;
string s; // 입력받은 문자열을 저장할 변수
int lcnt, vcnt; // lcnt: 연속된 모음의 개수, vcnt: 연속된 자음의 개수
// 문자가 모음인지 확인하는 함수
bool isVowel(int idx) {
return (idx == 'a' || idx == 'e' || idx == 'i' || idx == 'o' || idx == 'u');
}
int main() {
while(true) {
cin >> s;
if(s == "end") break; // "end"라는 문자열이 입력되면 프로그램 종료
lcnt = vcnt = 0; // 모음과 자음의 연속 개수를 초기화
bool flag = 0; // 문자열이 유효하지 않으면 true로 설정될 플래그
bool is_include_v = 0; // 문자열에 모음이 포함되었는지 확인하는 플래그
int prev = -1; // 이전 문자를 저장할 변수 (초기값은 -1)
// 문자열의 모든 문자를 하나씩 확인
for(int i = 0; i < s.size(); i++) {
int idx = s[i]; // 현재 문자의 아스키코드 값을 저장
// 현재 문자가 모음인 경우
if(isVowel(idx)) {
lcnt++; // 연속된 모음 개수 증가
vcnt = 0; // 자음 연속 개수 초기화
is_include_v = 1; // 모음이 포함되었음을 표시
}
// 현재 문자가 자음인 경우
else {
vcnt++; // 연속된 자음 개수 증가
lcnt = 0; // 모음 연속 개수 초기화
}
// 연속된 모음이나 자음이 3개 이상인 경우 유효하지 않음
if(vcnt == 3 || lcnt == 3) flag = 1;
// 연속된 두 문자가 같지만 'e'와 'o'가 아닌 경우 유효하지 않음
if(i >= 1 && (prev == idx) && (idx != 'e' && idx != 'o')) {
flag = 1;
}
prev = idx; // 현재 문자를 이전 문자로 저장
}
// 문자열에 모음이 하나도 포함되지 않은 경우 유효하지 않음
if(is_include_v == 0) flag = 1;
if(flag)
cout << "<" << s << ">" << " is not acceptable.\n";
else
cout << "<" << s << ">" << " is acceptable.\n";
}
return 0;
}
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.