주어진 문자열을 검사해 "PPAP"가 연속적으로 나오면 "P"로 줄이는 문제입니다.
먼저 PPAP가 있는지부터 판단해야하기 때문에 스택을 이용해 주어진 문자열을 처음부터 끝까지 삽입합니다.
삽입하면서 스택의 마지막 부분을 계속 확인하는데, 마지막 부분이 PPAP
면 스택을 4번 pop해주고 P
를 푸쉬합니다.
이렇게되면 PPAP문자열일 경우 마지막엔 반드시 P가 남습니다. 또한, P
만 주어지는 문자열도 PPAP문자열이기 때문에 마지막에 스택에 어떤 값이 들어있는지 확인하면 됩니다.
import sys
input = sys.stdin.readline
ppap = ["P", "P", "A", "P"]
stack = []
string = input().rstrip()
for i in range(len(string)):
# 문자열 하나 추가
stack.append(string[i])
while len(stack) >= 4 and stack[-4:] == ppap:
for _ in range(4):
stack.pop()
stack.append("P")
print("PPAP") if stack == ["P"] else print("NP")