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
8
0
코딩살구클럽 가입부탁드립니다
0
29
2
코딩살구클럽 가입 요청 확인부탁드립니다
0
31
2
5-S 테스트 케이스 질문
0
36
2
코살 문제풀이 환경
0
49
2
2 - T 오큰수 문제가 있는 것 같습니다.
0
43
1
추천 추가문제들
0
43
2
프로그래머스 코테 환경 관련해서 질문드립니다.
0
48
2
해당 문제에 대한 채점이 코딩살구클럽에서 올바르게 처리되지 않습니다.
0
44
2
균형 이진 트리 설명 시 높이 숫자
0
32
2
4-H 질문드립니다.
0
36
2
1-K 질문드립니다.
0
42
2
대기업 인적성 시험 질문
0
42
2
4-C 질문드립니다
0
41
2
[수학숙제 / BOJ 2870] 채점 서버 오작동
0
38
1
코테 준비 질문
0
52
1
살구클럽가입 요청드려요
0
40
2
1-I 문제 질문
0
43
2
코딩살구클럽 가입
0
58
2
AI 코딩 도구 사용 시 학습 방법 조언
0
53
2
코딩살구클럽 오류
0
62
2
코살클 [3-F 괄호 추가하기] 프라이빗 9번 제보
0
48
1
코딩살구클럽 테스트 케이스 오류 제보
0
54
2
삼성 코딩테스트
0
66
2





