-
[백준]16120: PPAP(java)Algorithm/백준 2022. 4. 5. 22:51728x90
문제
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를 출력한다.
예제 입력 1
PPPAPAP
예제 출력 1
PPAP
풀이
PPAP에서의 특징을 잘 생각해보았다.
1) PP > 2) A > 3) P가 반드시 이루어진다.
하지만 여기서 무한히 들어가게되면 PPPAP or PPPPAPAP 등 P는 앞에 무수히 나올 수 있다.
고로 우리는 A가 나오면 2개의 P를 빼줄 수 있고, 마지막 P는 A 이후에 나온다.
전체코드
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Stack; public class BJ_G4_16120_PPAP { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Stack<Character> stack = new Stack<>(); String str = br.readLine(); for(int i=0; i<str.length(); i++) { if(str.charAt(i) == 'P') { stack.push('P'); } else { if(stack.size() >= 2 && i!= str.length() -1 && str.charAt(i+1) == 'P') { stack.pop(); stack.pop(); } else { System.out.println("NP"); return; } } } if(stack.size() == 1) { System.out.println("PPAP"); } else { System.out.println("NP"); } } }
728x90'Algorithm > 백준' 카테고리의 다른 글
[백준]3190: 뱀(java) (0) 2022.04.07 [백준]16235: 나무 재테크(java) (0) 2022.04.06 [백준]1600: 말이 되고픈 원숭이(java) (0) 2022.04.04 [백준]17281: 야구공(java) (0) 2022.04.03 [백준]2580: 스도쿠(java) (0) 2022.04.02