https://www.acmicpc.net/problem/23797
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. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 29198번 - 이번에는 C번이 문자열 [Java] (0) | 2025.01.22 |
---|---|
[백준] 28094번 - 기말고사 작품 전시 [Java] (0) | 2025.01.22 |
[백준] 28113번 - 정보섬의 대중교통 [Java] (0) | 2025.01.22 |
[백준] 16394번 - 홍익대학교 [Java] (0) | 2025.01.22 |
[백준] 17087번 - 숨바꼭질 6 [Java] (1) | 2025.01.22 |