본문 바로가기
Develop/알고리즘

[백준/Python] Silver I #5525 IOIOI

by favorcat 2023. 1. 30.
반응형
 

5525번: IOIOI

N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O가 N개) I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇

www.acmicpc.net

문제

입력

첫째 줄에 N이 주어진다. 둘째 줄에는 S의 길이 M이 주어지며, 셋째 줄에 S가 주어진다.

출력

S에 PN이 몇 군데 포함되어 있는지 출력한다.

제한

서브태스크

풀이

# 시간초과로 인해 50점만 맞는 코드
n = int(input())
m = int(input())
s = input()
p = 'IO'*n+'I'

cnt = 0
for i in range(m-len(p)+1):
  if s[i:i+len(p)] == p:
    cnt += 1
print(cnt)
# 100점 코드
import sys
n = int(sys.stdin.readline())
m = int(sys.stdin.readline())
s = sys.stdin.readline().rstrip()

start, end = 0, 0
cnt = 0

while end < m:
  if s[end:end+3] == "IOI":
    end += 2
    if end - start == n*2:
      cnt += 1
      start += 2
  else:
    start = end = end + 1
print(cnt)

0이 n개만큼 나오므로 IOI의 수를 세면 된다.
시간초과로 인해 sys.stdin.readline()과 rstrip()을 이용하고,
두 포인터를 이용해서 포인터를 이동해가며 카운트를 하면 된다.

반응형

Comment