백준 5525번 - IOIOI

윤여준·2022년 5월 24일
0

백준 풀이

목록 보기
16/35
post-thumbnail

문제

문제 링크 : https://www.acmicpc.net/problem/5525

풀이

  1. 문자열의 첫번째 글자부터 I가 나올 때까지 검사를 해준다.
  2. I가 나왔으면 checkPn 함수에 n의 값과 I가 나온 인덱스를 넘겨준다.
  3. I가 나온 지점부터 IOIOI.... 패턴이 끝날 때까지 I의 개수를 세어준다.
  4. 이 때 우리가 알고 싶어하는 Pn의 개수는 I의 개수에서 n을 빼준 값이다. 따라서 result = i - n을 해준다. 하지만 result 값은 음수가 될 수 없으므로 음수가 되면 result = 0을 해준다.
  5. 다음 번 IOIOI... 패턴이 나타나는 곳을 찾아서 2 ~ 4번의 과정을 반복한다.
import sys
input = sys.stdin.readline


n = int(input())
m = int(input())
s = input().rstrip()

def checkPn(n,index):
    lenOfPn = 2 * n + 1
    i = 0
    idx = 0
    while index + 2 * idx + 1 < len(s):
        if s[index + 2 * idx] == "O":
            idx -= 1
            break
        if s[index + 2 * idx + 1] == "I":
            i += 1
            break
        i += 1
        idx += 1
    
    result = i - n

    if result < 0:
        result = 0
    return (result, idx * 2)

result = 0
index = 0
while index < m:
    if s[index] == "I":
        r, i = checkPn(n, index)
        result += r
        index += i + 1
    else:
        index += 1

print(result)
profile
Junior Backend Engineer

0개의 댓글