본문 바로가기
문제 풀이/[BaekJoon]

[BaekJoon] 5525 IOIOI (Silver 1) - Python

by 조랩 2023. 1. 5.

문제

 

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이 몇 군데 포함되어 있는지 구하는 프로그램을 작성하시오.


입출력 예시

 

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

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

제한:

  • 1 ≤ N ≤ 1,000,000
  • 2N+1 ≤ M ≤ 1,000,000
  • S는 I와 O로만 이루어져 있다.

서브테스크:

1 50 N ≤ 100, M ≤ 10 000.
2 50 추가적인 제약 조건이 없다.

 

입력예시1)

1
13
OOIOIOIOIIOII

출력예시1)

4
  • OOIOIOIOIIOII
  • OOIOIOIOIIOII
  • OOIOIOIOIIOII
  • OOIOIOIOIIOII

입력예시2)

2
13
OOIOIOIOIIOII

출력예시2)

2
  • OOIOIOIOIIOII
  • OOIOIOIOIIOII

코드

 

N = int(input()) # N입력
M = int(input()) # M입력
S = input() # S입력

cnt = 0 # 정답 변수
i = 0 # while
c = 0 # c

while i < (M - 1): # IOI가 몇 번 연속으로 존재하는지를 체크한다.
    if S[i:i + 3] == 'IOI': # IOI라면
        i += 2 # 인덱스를 뒤로 두 칸 이동
        c += 1 # c를 1 증가 - IOI의 반복 횟수를 나타냄
        if c == N: # 만약 c의 값이 N과 같다면
            cnt += 1 # 결과값을 1 증가
            c -= 1 # c의 값을 1 감소
    else: # IOI가 아니면
        i += 1 # 그냥 다음 인덱스로 이동
        c = 0 # c값 초기화

print(cnt) # 결과값 출력

실행 화면

 


채점 결과

728x90