stack에 I가 등장하면 인덱스를 push하고 stack의 원소의 차이가 2이상이면 답을 늘려가는 방식으로 풀 수 있다. 그러나 문자열 문제이기 때문에 split을 사용하는 방식으로 풀어보았다.

풀이

I를 기준으로 split하여 입력값을 받는다.

입력된 배열을 탐색하며 연속하는 ‘O’의 개수를 계산한다.

‘O’가 아닌 값이 등장하거나 배열의 마지막 인덱스에 도착하면 총 몇 개의 Pn이 만들어지는 지 계산하면 된다.

Pn의 개수는 = 연속하는 ‘O’의 개수 - N + 1 이다. ex)연속하는 O의 개수 6개, N=3 → 총 4개(IoIoIoIoIoIoI)

코드

# IOI
N=int(input())
length = int(input())
string = input().split('I')
sol=0
tmp=0
for i in range(len(string)) :
    
    if string[i] == 'O' and i!=len(string)-1:
        
        tmp+=1
    
    
    
    elif i==len(string)-1 or string[i] !='O':
        count = tmp-N+1
        if count > 0:
            sol+=count
        tmp=0
        
print(sol)

댓글남기기