728x90
https://www.acmicpc.net/problem/16120
PPAP에서 P가 PPAP로 바뀔 수 있다고 했다. 그렇다면 경우는 4가지가 나온다.
1. (PPAP)PAP
2. P(PPAP)AP
3. PPA(PPAP)
4. PPAP
이 4가지를 고려하며 코드를 짜야한다.
import sys
string = sys.stdin.readline().rstrip()
stack = []
ppap = [ 'P', 'P', 'A', 'P' ] #1
for i in range(len(string)):
stack.append(string[i]) #2
if stack[-4:] == ppap: #3
for _ in range(4):
stack.pop() #4
stack.append('P') #5
if stack == ['P']: #6
print('PPAP')
else:
print('NP')
#1 : 비교를 위한 리스트 생성
#2 : 일단 모든 문자열 다 넣어준다.
#3 : 리스트 슬라이싱을 이용해서 top부터 왼쪽 4칸이 PPAP를 만족한다면
#4 : 4번 빼기를 해서 PPAP를 뺴준다.
#5 : 그리고 빼준자리에 P를 넣어준다. (PPAP를 원래대로 되돌리는 것과 같다)
#6 : stack이 하나의 P만 있으면 올바른 문자열이다.
이 분의 코드를 참고했다.
https://velog.io/@sangjin98/알고리즘파이썬-백준-16120번-PPAP
스택문제에서 올바른 문자열인지 확인하는 문제는 마지막에 len(stack) == 0이면 yes이고 아니면 no인 경우가 많은데 이 문제는 PPAP를 P로 바꾸어주기 떄문에 조금 달랐다.
728x90
'[Coding Test] > [백준]' 카테고리의 다른 글
[백준] 11899 파이썬(python) : 괄호 끼워넣기 - 필요한 괄호 개수 세기 (0) | 2022.07.24 |
---|---|
[백준] 2800 파이썬(python) : 괄호 제거 (0) | 2022.07.24 |
[백준] 1662 파이썬(python) : 압축 (0) | 2022.07.24 |
[백준] 2493 파이썬(python) : 탑 - (monotone stack 알고리즘) (0) | 2022.07.23 |
[백준] 6198 파이썬(python) : 옥상 정원 꾸미기 (0) | 2022.07.23 |