~cpp //384 #include <iostream> using namespace std; #include <string> bool isSlump(string str) { int length = str.length(); int temp = -1; if (length < 3) return false; if (str[0] != 'D' && str[0] != 'E') return false; if (str[1] != 'F') return false; temp = str.find_first_not_of('F', 2); if (temp == -1) return false; if (temp == length - 1 && str[temp] == 'G') return true; else return isSlump(str.substr(temp, length - temp)); } bool isSlimp(string str) { int length = str.length(); if (length < 2) return false; if (str[0] != 'A') return false; if (length == 2 && str[1] == 'H') return true; if (length != 2 && str[length - 1] == 'C') { if (str[1] == 'B') return isSlimp(str.substr(2, length - 3)); else return isSlump(str.substr(1, length - 2)); } return false; } bool isSlurpy(string str) { int i, j, temp = -1; // temp는 Slimp의 마지막 문자 위치 int length = str.length(); temp = str.find_last_of('C'); if (temp == -1) temp = str.find_last_of('H'); // Slimp와 Slump로 분리해서 검사 if (temp != -1 && isSlimp(str.substr(0, temp + 1)) && isSlump(str.substr(temp + 1, length - temp - 1))) return true; else return false; } int main() { int numberOfCase; cin >> numberOfCase; int testCase, i, j; cout << "SLURPYS OUTPUT" << endl; for (testCase = 0; testCase < numberOfCase; testCase++) { string str; cin >> str; if (isSlurpy(str)) cout << "YES" << endl; else cout << "NO" << endl; } cout << "END OF OUTPUT" << endl; return 0; }