반응형
문제
bryan은 PPAP를 좋아한다. bryan은 어떻게 하면 사람들에게 PPAP를 전파할 수 있을까 고민하던 중 PPAP 문자열이라는 것을 고안하게 되었다.
PPAP 문자열은 문자열 P에서 시작하여, 문자열 내의 P를 PPAP로 바꾸는 과정을 반복하여 만들 수 있는 문자열로 정의된다. 정확하게는 다음과 같이 정의된다.
- P는 PPAP 문자열이다.
- PPAP 문자열에서 P 하나를 PPAP로 바꾼 문자열은 PPAP 문자열이다.
예를 들어 PPAP는 PPAP 문자열이다. 또한, PPAP의 두 번째 P를 PPAP로 바꾼 PPPAPAP 역시 PPAP 문자열이다.
문자열이 주어졌을 때, 이 문자열이 PPAP 문자열인지 아닌지를 알려주는 프로그램을 작성하여라.
입력
첫 번째 줄에 문자열이 주어진다. 문자열은 대문자 알파벳 P와 A로만 이루어져 있으며, 문자열의 길이는 1 이상 1,000,000 이하이다.
출력
첫 번째 줄에 주어진 문자열이 PPAP 문자열이면 PPAP를, 아닌 경우 NP를 출력한다.
예제 입력 1PPPAPAP
|
예제 출력 1PPAP
|
예제 입력 2PPAPAPP
|
예제 출력 2NP
|
풀이
문제의 설명을 반대로 생각해보자. 문자열 내의 PPAP 라는 문자열을 P 로 만드는 과정을 반복했을 때, 최종 문자열이 P 가 될 수 있으면 PPAP를, 아니면 NP를 출력하면 된다고 생각하면 이해하기 쉽다.
PPAP라는 문자열을 P로 수정할 때, replace 처럼 치환하는 식으로 하면 O(n^2)이 될 수 있으므로 주의하자.
s = input().rstrip()
stack = []
for i in s:
stack.append(i)
if stack[-4:] == ['P', 'P', 'A', 'P']:
for _ in range(3):
stack.pop()
print("PPAP" if len(stack) == 1 and stack[-1] == "P" else "NP")
반응형
'알고리즘 연습 > 스택' 카테고리의 다른 글
[🥇4 / 백준 1662 / 파이썬] 압축 (0) | 2024.07.16 |
---|---|
[Lv.2 / 프로그래머스 / 파이썬] 올바른 괄호 (0) | 2024.06.07 |
[🥈3 / 백준 12789 / 파이썬] 도키도키 간식드리미 (0) | 2023.08.09 |
[🥈4 / 백준 28278 / 파이썬] 스택 2 (0) | 2023.08.07 |
[🥈3 / 백준 17952 / 파이썬] 과제는 끝나지 않아! (2) | 2022.09.03 |