처음에는 있는 그대로 패턴 p를 만들고 그 길이만큼 비교했는데, 아니나 다를까 시간 초과가 났다. 패턴이 공통적으로 반복되어 있으니, 부분적으로 나눠서 패턴을 카운트하고, 그 개수만큼 패턴이 나오면 그때 비로소 패턴 p가 들어 있다고 적자. 이럴 경우 비교되는 문자열 개수가 훨씬 적기 때문에 시간 효율적이다.
import sys
n = int(sys.stdin.readline().rstrip())
m = int(sys.stdin.readline().rstrip())
s = sys.stdin.readline().rstrip()
cursor = 2*n+1
cnt = 0
p_cnt = 0
idx = 0
while idx < m-2:
# print(s[idx:idx+3])
if s[idx:idx+3] == 'IOI':
# 'IOI'가 들어있다면 패턴 카운트 1 추가
p_cnt += 1
if p_cnt == n:
# n개 패턴 카운트면 p_n이 존재한다.
cnt += 1
p_cnt -= 1
# 이동하므로 패턴 카운트 1을 줄인다.
idx += 2
# 'IOI'는 보장되고, 패턴은 'I'로 시작하므로 idx는 2씩 건너뛰어도 된다.
else:
p_cnt = 0
idx += 1
# 'IOI'가 아니기 때문에 패턴 카운트는 다시 0으로. idx는 1씩 건너뛰면서 확인하자.
print(cnt)