본문 바로가기

알고리즘/백준

[백준] 16120번 : PPAP

728x90

16120번: PPAP

 

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