이번에 풀어본 문제는
백준 5525번 IOIOI 입니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int m = Integer.parseInt(br.readLine());
char [] s = br.readLine().toCharArray();
int answer = 0;
int tmpCnt = 0;
for (int i = 1; i < m - 1;) {
if (s[i] == 'O' && s[i + 1] == 'I') {
tmpCnt++;
if (tmpCnt == n) {
// 맨앞이 I면 카운트++
if (s[i - ((n * 2) - 1)] == 'I') answer++;
tmpCnt--;
}
i += 2;
}
else {
tmpCnt = 0;
i++;
}
}
System.out.print(answer);
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int m = Integer.parseInt(br.readLine());
char [] s = br.readLine().toCharArray();
int answer = 0;
int tmpCnt = 0;
for (int i = 1; i < m - 1;) {
if (s[i] == 'O' && s[i + 1] == 'I') {
tmpCnt++;
if (tmpCnt == n) {
// 맨앞이 I면 카운트++
if (s[i - ((n * 2) - 1)] == 'I') answer++;
tmpCnt--;
}
i += 2;
}
else {
tmpCnt = 0;
i++;
}
}
System.out.print(answer);
}
}
반복되는 문자열을 카운트하여 출력하는 문제입니다.
무슨 이유인지 결과가 자꾸 50점이 찍혀서 다른 분들의 풀이를 참고해서 다시 제출했습니다.

제가 푼 방법이 평균 시간은 더 빠르다는 것 같은데, 특정 케이스에서 문제가 생기는 것 같네요 ㅠ 원인을 발견하지는 못하여 두 가지 풀이 모두 게시했습니다.