ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준]16120: PPAP(java)
    Algorithm/백준 2022. 4. 5. 22:51
    728x90

    문제

    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

    댓글

Designed by Tistory.