728x90
16120번: PPAP
첫 번째 줄에 문자열이 주어진다. 문자열은 대문자 알파벳 P와 A로만 이루어져 있으며, 문자열의 길이는 1 이상 1,000,000 이하이다.
www.acmicpc.net
🤔 문제분석
스택자료구조와 P의 개수와 C의 개수를 카운팅하여 조건부 연산을 통하여 PPAP를 만들 수 있는지 확인합니다.
P를 만나면 p_count를 증가시키고 C를 만나면 c_count를 증가시킵니다. 이전에 값이 C이고 그다음이 P가 나올경우 p_count의 PPAP를 만들 수 있는지 카운팅을 하고 p_count값을 -2 감소 c_count값을 -1을 감소시킵니다.
이렇게 해서 최종 p_count값이 1이 나온경우만 정답이 됩니다. 마지막에 PPAP → P로 변하기 때문이다.
💻 코드
import sys
input = sys.stdin.readline
string = str(input().strip())
p_count = 0
a_count = 0
stack = []
for char in string:
if stack and stack[-1] == 'A' and char == 'P' and p_count >= 2:
p_count -= 2
a_count -= 1
if char == 'P':
p_count += 1
else:
a_count += 1
stack.append(char)
if p_count == 1 and a_count == 0:
print("PPAP")
else:
print("NP")
🎯 피드백 및 개선사항
문제 해결방법의 아이디어를 떠올리는데 시간이 조금 걸렸습니다. 여러가지 유형을 익혀서 다음 문제를 풀때 도움이 되길 😊
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 17825번 : 주사위 (1) | 2024.02.26 |
---|---|
[백준] 4803번 : 트리 (1) | 2024.02.26 |
[백준] 13975번 : 파일 합치기 3 (1) | 2024.02.24 |
[백준] 16724번 : 피리부는사나이 (1) | 2024.02.24 |
[백준] 14725번 : 개미굴 (1) | 2024.02.24 |