본문 바로가기
코딩테스트 준비/백준

[백준] 23797번 - 개구리 [Java]

by mwzz6 2025. 1. 22.

https://www.acmicpc.net/problem/23797

 

[백준] 23797번 - 개구리 [Java]
[백준] 23797번 - 개구리 [Java]


1.  아이디어

 

P부터 우는 개구리가 있을 수 있고 K부터 우는 개구리가 있을 수 있다. P부터 우는 개구리는 startP 변수에 K부터 우는 개구리는 startK 변수에 마리 수를 저장했다. P부터 우는 개구리 중 울음소리가 P로 끝나는 개구리는 pIdx 변수에 K부터 우는 개구리 중 울음소리가 K로 끝나는 개구리는 kIdx 변수에 저장했다.

주어진 울음소리의 각 문자를 순회하며 P가 등장했을 때 K부터 우는 개구리 중 울음소리가 K로 끝난 개구리가 현재 없는 경우 P부터 우는 개구리가 추가로 존재하는 것이다. 반대로 K가 등장했을 때 P부터 우는 개구리 중 울음소리가 P로 끝난 개구리가 현재 없는 경우 K부터 우는 개구리가 추가로 존재하는 것이다.


2. 문제풀이

 

P가 등장했을 때 kIdx가 0이면 pIdx를 1 늘리고 kIdx가 0이 아니면 kIdx를 1 줄이는 방식으로 구현했다. 반대도 마찬가지고 이후 Math.max 메서드로 각 울음소리 별 개구리의 수를 매 순간 최댓값으로 유지하도록 구현했다.


3. 코드

 

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        char[] input = br.readLine().toCharArray();

        int startP = 0;
        int startK = 0;
        int pIdx = 0;
        int kIdx = 0;

        for (char c : input) {
            if (c == 'P') {
                if (kIdx == 0) pIdx++;
                else kIdx--;
            } else {
                if (pIdx == 0) kIdx++;
                else pIdx--;
            }

            startP = Math.max(startP, pIdx);
            startK = Math.max(startK, kIdx);
        }

        System.out.println(startP + startK);
    }
}

4. 후기