2-H 질문드립니다.
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점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
코딩 살구클럽 가입 문의
0
63
2
코딩살구클럽 가입문의
0
69
2
3-K private case 질문
0
64
2
안녕하세요. 코딩살구클럽 문의드립니다!
0
76
2
7:41 듣다가 질문합니다
0
73
2
코드 리뷰 요청드립니다!
0
81
2
코딩살구클럽 계정 문의
0
76
2
SK하이닉스 대비 강의수강
0
210
3
코딩살구클럽 등록부탁드립니다.
0
78
2
7-F 재귀로 풀시 런타임애러
0
72
1
1-N 문제 질문입니다. (+ 채점오류)
0
82
2
코딩살구클럽 가입 확인 부탁드립니다.
0
86
2
직장인 코테 합격 공부방법 문의
0
122
2
코딩살구클럽 가입 방법
0
94
2
6-H 체점 관련 질문
0
74
1
채점서버 연결 관련 질문입니다
0
101
2
삼성 s직군
0
88
1
삼성 코테 없어짐
0
210
1
코딩살구클럽 가입부탁드립니다
0
87
2
코딩살구클럽 가입 요청 확인부탁드립니다
0
69
2
5-S 테스트 케이스 질문
0
78
2
코살 문제풀이 환경
0
88
2
2 - T 오큰수 문제가 있는 것 같습니다.
0
81
1
추천 추가문제들
0
74
2





