본문 바로가기

Python 코딩테스트

[백준] 5525 IOIOI 파이썬

반응형

문제

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


 

풀이

 

I의 위치를 배열 stack에 저장하고 stack[n+1]과 stack[n] 의 차이가 2라면 IOI 임을 판단하는 방법으로 문제를 해결했다.

 

 import sys

 input = sys.stdin.readline

 N = int(input())
 M = int(input())
 S = list(input().rstrip())

 cnt = 0
 answer = 0
 stack = []

 for i in range(M):
	 if S[i] == "O":
    	 continue
     else:
    	 stack.append(i) # I의 위치 인덱스 저장
         
#print(stack)

 for i in range(1, len(stack)):
	 if stack[i] - stack[i - 1] == 2:
    	 cnt += 1
     else:
    	 cnt = 0
    
     if cnt >= N:
    	 answer += 1

 print(answer)

N = 1

M = 13
S = OOIOIOIOIIOII

 

stack에 I의 위치 인덱스를 저장 ex) stack = [2, 4, 6, 8, 9, 11, 12] 

 

stack의 길이만큼 for문을 돌면서 차이가 2인지 확인한다.

 

2라면 IOI로 판단하고 cnt를 1 올려주고, 2가 아니라면 IOI가 아니기 때문에 0으로 다시 초기화시켜준다.

 

매 for문마다 cnt와 N을 비교해서 N에서 요구하는 IOI의 길이를 만족한다면 answer에 +1을 해준다. 

반응형