문자열 P에서 시작해서 문자열 내의 어떠한 P를 PPAP로 반복적으로 바꿔서 만들 수 있는 문자열을 PPAP 문자열이라고 한다. 어떠한 문자열이 주어지면 이 문자열이 PPAP 문자열인지 판별해야 한다.
문자열을 입력 받은 뒤에, 각 문자를 순서대로 하나씩 새로운 문자열에 넣어줍니다. 이 새로운 문자열의 마지막 4개의 문자로 이루어진 부분 문자열이 "PPAP"라면 이 부분 문자열이 "PPAP"가 아닐 때까지 반복적으로 P로 대치해줍니다. 입력 받은 문자열이 PPAP 문자열이라면, 마지막에는 P만 남게 됩니다.
#include <bits/stdc++.h>
using namespace std;
int main(void) {
string str, ppap;
cin >> str;
for (auto& i : str) {
ppap.push_back(i);
if (ppap.size() < 4)
continue;
while (ppap.size() >= 4 && ppap.substr(ppap.size() - 4, 4) == "PPAP") {
for (int j = 0; j < 4; j++)
ppap.pop_back();
ppap.push_back('P');
}
}
cout << (ppap == "P" ? "PPAP" : "NP") << '\n';
return 0;
}