[백준 5525] IOIOI

Junyoung Park·2022년 3월 2일
0

코딩테스트

목록 보기
160/631
post-thumbnail

1. 문제 설명

IOIOI

2. 문제 분석

처음에는 있는 그대로 패턴 p를 만들고 그 길이만큼 비교했는데, 아니나 다를까 시간 초과가 났다. 패턴이 공통적으로 반복되어 있으니, 부분적으로 나눠서 패턴을 카운트하고, 그 개수만큼 패턴이 나오면 그때 비로소 패턴 p가 들어 있다고 적자. 이럴 경우 비교되는 문자열 개수가 훨씬 적기 때문에 시간 효율적이다.

  • 문제를 읽고 그 원리를 자그맣게 나눠서 생각하는 습관을 기르고 싶다.

3. 나의 풀이

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)
profile
JUST DO IT

0개의 댓글