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
7
1
코딩살구클럽 승인
0
18
2
DP 경우의 수 설명이 이해가 되지 않습니다.
0
27
2
3-F 채점 관련 질문
0
24
1
BFS, DFS 활용이 되는 상황에서의 방향성
0
28
2
코딩살구클럽 승인
0
41
2
코딩살구클럽승인
0
33
3
코딩살구클럽 승인
0
48
2
3-D 관련 질문
0
35
2
코살구 회원가입 문의
0
43
2
코살구 로그인 문제
0
65
2
3-A 문제 풀이 관련 질문
0
53
3
2-O 질문 있습니다
0
38
2
2-T 문제에 관한 질문
0
40
2
코딩 살구 클럽 접속 및 사용방법 문의
0
61
2
안녕하세요~. 현재 코살코딩클럽 사이트가 접속이 안됩니다~
0
64
2
코딩살구클럽 로그인문제
0
78
3
코딩 살구 클럽 로그인 문제
0
82
2
2-J 채점관련 질문
0
65
3
코딩 살구 클럽 Python 지원 가능 여부
0
77
1
살구클럽 아이디 없음 문제
0
76
1
1-O 코딩살구클럽 채점관련 질문
0
60
2
히든 테스트 케이스가 사라졌습니다
0
57
1
채점서버 혹시 다른 언어 지원도 가능하게 해주실 수 있나요
1
74
2





