본문 바로가기
백준 알고리즘

파이썬) 백준 알고리즘 | 16120번 : PPAP

by 코딩새내기_ 2022. 6. 30.

https://www.acmicpc.net/problem/16120

 

16120번: PPAP

첫 번째 줄에 문자열이 주어진다. 문자열은 대문자 알파벳 P와 A로만 이루어져 있으며, 문자열의 길이는 1 이상 1,000,000 이하이다.

www.acmicpc.net

 

 

 

pseudo code

A를 처리하는게 핵심입니다.

stack = deque()
for i=1 to {len sentence} do
	stack.append(sentence[i])
    if sentence[i] == A then
    	A주변의 문자열을 조사해서 PPAP인지 확인한다
        if PPAP then
        	stack에 있는 PPAP에서 P만 남긴다
        else
        	break
if stack == 'P':
	print("PPAP")
else:
	pirnt('NP')

 

 

*제가 제출한 코드인데 장황하게 풀어서 다른 분의 코드까지 첨부합니다.

제가 제출한 코드입니다.

from collections import deque
stack = deque([])
sentence = input()
check = False
for i in range(len(sentence)):
    stack.append(sentence[i])
    if check and sentence[i] == 'P':
        stack.pop()
        stack.pop()
        stack.pop()
        check = False
    elif check and sentence[i] == 'A':
        break
    else:
        pass
    if sentence[i] == 'A':
        try:
            if ''.join([stack[-3],stack[-2]]) == 'PP':
                check = True
            else:
                pass
        except:
            pass
if ''.join(stack) == 'P':
    print('PPAP')
else:
    print("NP")

다른 분의 코드입니다.

w = input()
stack = []
ppap = ["P", "P", "A", "P"]
for i in range(len(w)):
    stack.append(w[i])
    if stack[-4:] == ppap:
        for _ in range(4):
            stack.pop()
        stack.append("P")
if stack == ppap or stack == ["P"]:
    print("PPAP")
else:
    print("NP")

댓글