작성
·
182
0
제가 짠 코드가 예제출력은 맞게 나오는데 제출했을 때 틀렸다고 나옵니다.
강의 보기 전에 짠거라서 강사님과는 다른 방향으로 풀었지만 어디서 잘못됐는지 궁금합니다.
#include <iostream>
#include <string>
using namespace std;
string s;
int mo[21];
int cnt;
int main(){
while(true){
cin >> s;
cnt=0;
if(s == "end") break;
//s가 높은 품질이 아니면
//1번째 조건
if(s.find('a') && s.find('e') &&
s.find('i') && s.find('o') && s.find('u') > 20){
cnt += 1;
}
//2번째 조건
fill(&mo[0], &mo[0]+21, 0);
for(int i=0; i<s.size(); i++){
if(s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u'){
mo[i] = 1;
}
else{
mo[i] = 2;
}
}
if(s.size()>=3){
for(int i=0; i<s.size()-2; i++){
if(mo[i] == mo[i+1] && mo[i+1] == mo[i+2]){
cnt+=1;
}
}
}
//3번째 조건
for(int i=0; i<s.size(); i++){
if((s[i] == s[i+1]) && s[i] != 'e' && s[i] != 'o'){
cnt += 1;
}
}
//cnt가 1이라도 있으면 낮은 품질
if(cnt>=1){
cout << "<" << s << "> is not acceptable." << '\n';
}
//그렇지 않으면 높은 품질
else{
cout << "<" << s << "> is acceptable." << '\n';
}
}
return 0;
}
답변 1
0
안녕하세요 firdoo님 ㅎㅎ
이 반례를 해결하지 못하는거 같아요.
kee
firdoo님 코드 :
<kee> is not acceptable.
정답은 acceptable이 나와야 합니다.
해당 부분의 로직 확인 부탁드립니다.
그리고 코드리뷰를 좀 드리면요.
if(s.find('a') && s.find('e') &&
s.find('i') && s.find('o') && s.find('u') > 20){
모음(a,e,i,o,u) 하나를 반드시 포함하여야 한다.
를 코드로 나타내신거 같은데 이부분이 좀 잘못된 거 같아요.
번역하자면 a, e, i, o의 위치 & u같은 경우 20번째 이후에 있어야 한다.. 이건데 좀 이상합니다.
일단 find를 통해 못찾을 경우 string::npos를 반환하는데
#include <bits/stdc++.h>
using namespace std;
int main(){
string a = "eeeeralodopa";
cout << a.find("dopabb") << '\n';
cout << bool(a.find("dopabb"))<< '\n';
return 0;
}
이를 bool로 바꾸면 1이 나옵니다. 즉, false가 아니라는 것이죠.
또 질문 있으시면 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다.
감사합니다.