문제 : BOJ 16120 PPAP
'PPAP'가 나타날 때 마다 'P'로 바꿔준다.
를 효율적으로 구현하지 못해 틀렸다.
문자열을 차례로 순회하고,
스택을 두개 써서 하나는 'PPAP'를 만들어 주는 용도로,
다른 하나는 'PPAP'가 되지 못하는 문자들을 넣어주는 용도로 작성했고
정답은 잘 출력 되었으나 시간 초과를 받았다.
문제의 조건에 대해서 길게 생각하지 않고 바로 구현하려는 시도를 한 것이
시간 내에 풀지 못한 원인이라고 생각한다.🥲
전체 문자열을 순회하며 스택에 넣어주는 것은 맞으나
결국 스택 마지막에 쌓인 'PPAP' 만을 식별해서 'P'로 치환하는 것을 반복해 주면 되는 문제였다.
PPAP 문자열
이 아니다.순회가 종료된 뒤, 스택에 남은 문자가 'P' 하나라면 PPAP 문자열
이고,
그렇지 않다면 PPAP 문자열
이 아니다.
[ 전체 코드 ]
import sys
def solution():
ppap = sys.stdin.readline().rstrip()
stack = []
for p in ppap:
if stack and stack[-1] == 'A':
if p == 'P' and len(stack) >= 3 and stack[-3:] == ['P', 'P', 'A']:
stack.pop()
stack.pop()
stack.pop()
else:
print('NP')
return
stack.append(p)
if stack == ['P']:
print('PPAP')
else:
print('NP')
solution()