728x90
반응형
https://www.acmicpc.net/problem/5525
Python
import sys
input = sys.stdin.readline
n = int(input())
m = int(input())
s = input().rstrip()
ans = 0
length = 1
for i in range(s.find('I')+1, m): # I가 처음으로 나오는 곳부터 시작
if length == 0 and s[i] == "I": # 새롭게 수열 계산해야 할 시점인지 판단
length = 1
continue
if s[i] != s[i-1]:
length += 1
else:
if s[i-1] != "I": # IOIO 처럼 O가 붙어서 끝나는 경우 길이-1
length -= 1
if length >= (1+2*n): # Pn보다 짧은 수열이면 패스
ans += (length - (1+2*n))//2 + 1 # 그 차이 중 I개만 선택
length = 1 if s[i] == "I" else 0 # 곧바로 새로운 수열이 시작되는지 확인하기
# IOIOI처럼 단 한 번도 같은 경우 없이 끝나는 상황까지 처리하기
if length >= (1+2*n):
if s[-1] != "I":
length -= 1
ans += (length - (1+2*n))//2 + 1
print(ans)
728x90
반응형
'Algorithm Problems' 카테고리의 다른 글
[백준][Python] 20301번 반전 요세푸스 - 원형 큐 (0) | 2021.08.04 |
---|---|
[백준][Python] 11723번 집합 (0) | 2021.08.04 |
[백준][Python] 15828번 Router - 원형 큐 (0) | 2021.08.01 |
[백준][Python] 2751번 수 정렬하기2 - MergeSort (0) | 2021.07.29 |
[백준][Python] 18258번 큐2, 10866번 덱 - 연결 리스트 (0) | 2021.07.29 |