[파이썬] 백준 5525 : IOIOI

728x90

[파이썬] 백준 5525 : IOIOI

5525번: IOIOI (acmicpc.net)

 

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

실버 2

문자열


접근

n이 1 :  IOI

n이 2 :  IOIOI

n이 3 :  IOIOIOI

 

먼저 반복문을 돌리면서 I가 위치한 인덱스 값을 새로운 리스트에 append한다.

 

리스트의 i번째 값과 i-1번째 값의 차가 2라면 IOI와 같은 경우이므로 카운터 변수를 하나 증가시키는 방법으로 IOI를 탐색할 수 있다. 만약 차가 2가 아니면 카운터 변수를 0으로 초기화한다.

 

만약 n이 2인 경우, 찾아내야할 값은 IOIOI이므로 위와 같은 방법이라면 카운터 변수가 2가 되어야 필요한 값을 탐색할 수 있을 것이다.

IOIOI에서 I의 인덱스 값을 새로운 리스트에 넣으면 [0, 2, 4]가 되고,

위와 같은 방법을 적용하면 카운터 변수는 2가 되므로, n과 같은 값이기 때문에 IOIOI를 탐색한 것과 같다.

 

중요한 것은 카운터 변수 >= n 인 경우에 정답으로 출력할 값이 하나씩 증가한다는 점이다.

 

코드

import sys; input = sys.stdin.readline
N = int(input())
M = int(input())
S = input().rstrip()
lst = []
cnt, ans = 0, 0
for i in range(len(S)):
    if S[i] == 'I':
        lst.append(i);
    else:
        continue
for i in range(1, len(lst)):
    if lst[i] - lst[i-1] == 2:
        cnt += 1
    else:
        cnt = 0
    
    if cnt >= N:
        ans += 1

print(ans)

 

 

728x90