PPAP 문자열은 문자열 P 에서 시작하여, 문자열 내의 P를 PPAP로 바꾸는 과정을 반복하여 만들 수 있는 문자열로 정의됨문자열이 주어졌을 때, 이 문자열이 PPAP 문자열인지 아닌지 알려주는 프로그램 작성
제약 조건 :
문자열은 대문자 알파벳 P와A로만 이루어져 있으며, 문자열의 길이는 1 이상 1,000,000 이하
🚀 의사 결정
1. 반복문으로 문자열 순차적으로 검사
2. P가 올 경우 카운트 증가 시키고,
3. A가 올 경우 A가 오기 전에 P 가 충분하지 않으면 규칙위반으로 false 리턴
4.A가 올 경우 A 뒤에 반드시 P가 와야 하므로, 다음 문자가 P 인지 확인
5. A 뒤에 P 가 없으면 규칙 위반으로 false 리턴
6. 마지막에 정확히 하나의 P 만 남아 있어야 PPAP 성립
📜소스코드(Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
// PPAP 규칙을 확인하고 결과를 출력
if(checkPPAP(str)) {
System.out.println("PPAP");
} else {
System.out.println("NP");
}
}
private static boolean checkPPAP(String str) {
int pCount = 0;
// 문자열을 순차적으로 검사
for (int i = 0; i < str.length(); i++) {
char cur = str.charAt(i);
// 'P'가 오면 카운트 증가
if (cur == 'P') {
pCount++;
// 'A'가 오면 이전에 두 개 이상의 'P'가 있어야 함
} else if (cur == 'A' && pCount >= 2) {
// 'A' 뒤에 반드시 'P'가 와야 하므로 다음 문자가 'P'인지 확인
if (i < str.length() - 1 && str.charAt(i + 1) == 'P') {
// 'P' 두 개를 하나로 합치면서 카운트 감소
pCount--;
// 'P'를 하나 건너뛰어 처리
i++;
} else {
// 'A' 뒤에 'P'가 없으면 규칙 위반
return false;
}
} else {
// 'A'가 오기 전에 'P'가 충분하지 않으면 규칙 위반
return false;
}
}
// 마지막에 정확히 하나의 'P'만 남아 있어야 PPAP가 성립
return pCount == 1;
}
}