Python3/백준 알고리즘

2022.03.10 [백준] (python 파이썬) IOIOI

ian's coding 2022. 3. 10. 21:55
728x90
반응형

 

 

 

 

 

https://www.acmicpc.net/problem/5525

 

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


풀이

Pn은 'IO'가 n번 나오고 마지막에 'I'가 나온다. 여기서 규칙을 찾으면 중간의 I가 겹치면서 IOI가 n번 반복되는것을 확인할 수 있다.

  • 각 인덱스에서 IOI의 패턴인지 확인하고 맞으면 check를 증가시킨다. 
  • 만약 check가 n과 같으면 cnt을 증가시키고 check를 1 감소시킨다. 이유는 이미 하나의 만족하는 결과를 얻었기 때문에 처음의 IOI패턴을 하나 빼주는 것이다.
  • 그리고 i를 1증가시킨다. (다음 인덱스를 확인하기 위해)
  • 만약 IOI패턴이 아니면 check를 0으로 초기화 시켜준다. 왜냐하면 패턴이 깨졌기 때문에 다시 패턴이 연결되는것을 확인해야 하기 때문이다.
  • 그리고 i를 1증가시킨다.
  • 코드에서 13,16번째줄에서 i를 증가시키는데 만약 IOI패턴이 증가되면 1을 증가시키고 마지막에 다시 한번더 i를 증가시켜서 O를 건너뛰고 다음 I를 확인하기 위해서 이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
N=int(input())
M=int(input())
s=input()
cnt=0
check=0
i=1
while i<M-1:
    if s[i-1]=='I' and s[i]=='O' and s[i+1]=='I':
        check+=1
        if check==N:
            cnt+=1
            check-=1
        i+=1
    else:
        check=0
    i+=1
print(cnt)
cs

 

 

 

 

728x90
반응형