⛔ 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.
1. w는 첫번째로 나와야한다.
2. f로 끝났을때 다음도 w가 나와야한다.
이 과정을 반복하자!
첫번째 w가 나오지 않으면? 그것은 올바른 값이 아니다.
w의 개수(n) 만큼 n * 4 가 해당하는 길이가 된다.
그만큼 잘라서 검증을 하고, string을 자른다.
-> 잘랐을때 4의 배수가 아니라면? 그것은 옳바른 답이 아니다.
-> 또는 길이가 wolf가 전부 들어가지 않는다면 옳바른 답이 아니다.
위 내용은 제가 문제를 풀기 전에 써두었던 내용입니다. 그리고 이 문제가 구현이고 꽤나 귀찮은 문제여서 아마 29%의 정답률이 나오지 않았나 싶습니다.
저도 두번 정도 틀리고, 반복시에 다시 체크해줘야 되는 부분을 파악한 결과 정답을 얻을 수 있었습니다.
아래는 정답코드입니다. 그 char 초기화할떄 '' 이렇게 빈값으로 하면 안되더라고요? 왜 그런지는 모르겠지만 다음에 알아봐야할 것 같습니다. 그래서 'a'로 초기화했습니다.
#include<iostream>
#include<string>
using namespace std;
string wolf;
bool solve() {
if(wolf[0] != 'w') return false;
else if(wolf.length() % 4 != 0) return false;
else{
while(wolf.length() && wolf.length() % 4 == 0){
int cnt = 0;
if(wolf[0] != 'w') return false;
for(int i = 0; i < wolf.length(); i++){
if(wolf[i] == 'w') cnt++;
else break;
}
int len = cnt * 4;
if(wolf.length() < len) return false;
string temp = wolf.substr(0, len);
char prechar = 'a';
for(int i = 0; i < temp.length(); i+=cnt){
char c = temp[i];
if(prechar == 'a' && c == 'w') {
prechar = 'w';
} else if(prechar == 'w' && c == 'o'){
prechar = 'o';
} else if(prechar == 'o' && c == 'l'){
prechar = 'l';
} else if(prechar == 'l' && c == 'f'){
prechar == 'f';
} else return 0;
for(int j = i; j < i + cnt; j++){
if(temp[j] != c) return false;
}
}
wolf = wolf.substr(len, wolf.length());
}
return true;
}
}
int main() {
cin >> wolf;
if(solve()) cout << 1;
else cout << 0;
return 0;
}