solved_ac[Class3][IOIOI](https://www.acmicpc.net/problem/5525)
N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다.
I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇 군데 포함되어 있는지 구하는 프로그램을 작성하시오.
첫째 줄에 N이 주어진다. 둘째 줄에는 S의 길이 M이 주어지며, 셋째 줄에 S가 주어진다.
S에 Pn이 몇 군데 포함되어 있는지 출력한다.
1
13
OOIOIOIOIIOII
4
2
13
OOIOIOIOIIOII
2
예를 들어 OOIOIOIOIIOII 라는 문자열을 입력을 받았고 N = 1을 입력을 받았다면 일단 N = 1인 문자열이 무엇인지 생각해야한다.
이런 규칙이 나오게 되는데 여기서 생각하야 할 것은 N = 1일 때 IOI가 한 번 나오고 N = 2일 때 IOI가 두 번 나오는 것이다. IOIOI에서 왜 IOI가 두 번일까?
IOI가 한번 나오고 나서 다시 I에서 시작해서 IOI를 새는 것이다. 이렇게 생각하고 나서 풀이를 생각하면 쉽게 풀 수 있다.
import sys
N = int(sys.stdin.readline())
length = int(sys.stdin.readline())
compare_str = sys.stdin.readline()
Pn = ""
for i in range(2 * N + 1):
if i % 2 == 0:
Pn += "I"
else:
Pn += "O"
index = 0
count = 0
while True:
if compare_str[index:index+3] == "IOI":
index += 2
if N == 1:
count += 1
else:
a = index + len(Pn) - 2
if compare_str[index+1:a] == Pn[3:]:
count += 1
else:
index += 1
if index == (length - 2):
break
print(count)
import sys
N = int(sys.stdin.readline())
length = int(sys.stdin.readline())
compare_str = sys.stdin.readline()
index = 1
count = 0
result = 0
while True:
if compare_str[index - 1] == "I" and compare_str[index] == "O" and compare_str[index + 1] == "I":
index += 2
count += 1
if count == N:
count -= 1
result += 1
else:
index += 1
count = 0
if index >= (length - 1):
break
print(result)