#문제링크
https://www.acmicpc.net/problem/16120
16120번: PPAP
첫 번째 줄에 문자열이 주어진다. 문자열은 대문자 알파벳 P와 A로만 이루어져 있으며, 문자열의 길이는 1 이상 1,000,000 이하이다.
www.acmicpc.net
#나의풀이
import sys
from collections import deque
if __name__=="__main__":
S = sys.stdin.readline().rstrip()
stack = []
for i in range(len(S)):
if len(stack) == 0:
stack.append(S[i])
continue
if len(stack) > 2:
if "".join(stack[len(stack)-3:len(stack)]) == "PPA" and S[i] == "P":
stack.pop()
stack.pop()
stack.pop()
stack.append(S[i])
if (len(stack) == 0 or (len(stack) == 1 and stack[0] == 'P')):
print("PPAP")
else:
print("NP")
#해설
마지막 100퍼에서 P도 PPAP 문자열이라 PPAP를 출력 해야하는데 안해서 틀려버렸다.
for i in range(len(S)):
if len(stack) == 0:
stack.append(S[i])
continue
if len(stack) > 2:
if "".join(stack[len(stack)-3:len(stack)]) == "PPA" and S[i] == "P":
stack.pop()
stack.pop()
stack.pop()
stack.append(S[i])
이런 문자열을 다뤄야 하는 애들은 stack으로 처리를 했다.
문자열을 받는데 0번째 자리에 들어가는 문자라면 아무 조건 없이 넣어주고( 여기서는 ppap 4글자이므로 4글자 이하는 그냥 넣어줘도 될듯 싶다) 안에 있는 값이 3자리(들어갈 수 1자리 해서 ppap인 4자리)이상일 경우 체크를 해주는데 맨뒤 글자 3개를 추출해서 PPA이고 현재값이 P라면 PPAP로 완성이므로 나머지 3개를 넣어주고 조건과 상관없이 문자가 들어가야 하므로 조건문 밖에서 문자를 넣어주었다.
if (len(stack) == 0 or (len(stack) == 1 and stack[0] == 'P')):
print("PPAP")
else:
print("NP")
이후 남은 스택의 길이가 0이거나 길이가 1인데 안에 값이 P일 경우 PPAP 문자열이므로 PPAP를 출력해주었고
아닐 경우 NP를 출력했다.
'코딩테스트' 카테고리의 다른 글
[백준/파이썬] 2655 미로만들기 (0) | 2023.01.30 |
---|---|
[백준/파이썬] 22866 탑 보기 (0) | 2023.01.19 |
[백준/파이썬] 5430 AC (0) | 2023.01.17 |
[백준/파이썬] 27211 도넛 행성 쇼미더코드 3회차 (0) | 2023.01.15 |
[백준/파이썬] 1446 지름길 (0) | 2023.01.12 |