[문제링크]

 

16120번: PPAP

첫 번째 줄에 문자열이 주어진다. 문자열은 대문자 알파벳 P와 A로만 이루어져 있으며, 문자열의 길이는 1 이상 1,000,000 이하이다.

www.acmicpc.net

 

0. PPAP문자열이란? - P에서 시작해 P를 PPAP로 치환한 문자열

  - 반대로 PPAP를 P로 치환하다 보면 근본인 P로 돌아간다

 

1. PPAP는 P로만 치환되므로, A에만 집중하면 된다

 

2. A가 들어왔을때, 앞에는 반드시 P가 2개 이상 존재해야하고, 뒤에도 P가 하나 존재해야만 한다

 

3. 해당 조건을 위해, 앞에 등장한 P의 갯수를 세서 저장하고 있는다 (curIndex)

  - A가 들어올 때 curIndex가 2 이상이고, A의 뒤에도 P가 있다면 PPAP를 감지, P로 치환한다

  - 결과적으로 curIndex는 (-2+1) 되니 -1 된다

 

4. 해당 조건을 만족하지 않을 경우 PPAP문자열이 아니므로, 즉시 실패처리 및 break한다

 

5. 모든 PPAP가 성공적으로 전환된 후에, P 하나만 남아있어야한다

  - curIndex이 1보다 크면 P가 여러개 있는 문자열, 실패처리한다

 

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main{
	public static void main(String[] args)throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String s = br.readLine();
		
		int curIndex=0;
		boolean isOK=true;
		for (int i = 0; i < s.length(); i++) {
			char c = s.charAt(i);
			if(c=='P') {
				curIndex++;
			}
			else {
				//new PPAP or wrong
				if(c=='A') {
					if(curIndex>=2 && i+1 < s.length() && s.charAt(i+1)=='P') {
						curIndex--;
						i++;
					}
					else {
						//wrong
						isOK=false;
						break;
					}
				}
				else {
					//wrong
					isOK=false;
					break;
				}
			}
		}
		if(curIndex>1)isOK=false;
		System.out.println(isOK?"PPAP":"NP");
		
	}
	
	static int pint(String s) {
		return Integer.parseInt(s);
	}
	
}

결과 화면

'알고리즘 문제 풀이 > BOJ 골드' 카테고리의 다른 글

[백준] 1826 - 연료 채우기  (0) 2021.07.07
[백준] 7579 - 앱  (0) 2021.06.27
[백준] 2212 - 센서  (0) 2021.06.24
[백준] 13904 - 과제  (0) 2021.06.24
[백준] 1747 - 소수 & 팰린드롬  (0) 2021.06.18
[백준] 1342 - 행운의 문자열  (0) 2021.06.18
[백준] 9081 - 단어 맞추기  (0) 2021.06.18

+ Recent posts