[백준-5525] IOIOI / Python

📚 Problem Solving/Baekjoon

 

5525번: IOIOI

첫째 줄에 N이 주어진다. 둘째 줄에는 S의 길이 M이 주어지며, 셋째 줄에 S가 주어진다. (1 ≤ N ≤ 1,000,000, 2N+1 ≤ M ≤ 1,000,000)

www.acmicpc.net

import sys

n = int(sys.stdin.readline())
m = int(sys.stdin.readline())
s = sys.stdin.readline()
answer, pattern, i = 0, 0, 1
while i < m - 1:
    if s[i - 1] == "I" and s[i] == "O" and s[i + 1] == "I":
        pattern += 1
        if pattern == n:
            answer += 1
            pattern -= 1
        i += 1
    else:
        pattern = 0
    i += 1
print(answer)

 

해설

처음 문제를 해결한 코드는 인덱스를 이용해 패턴 문자길이만큼 늘려가며 답을 도출하는 코드였는데 시간초과가 걸렸다.. 위처럼 IOI에 맞는 패턴을 가지면 값을 하나씩 늘려주며 답을 구하는게 시간초과를 피해갈 수 있는 방법이었다😥