정리용

[백준 5525] 파이썬 - ioioi 본문

알고리즘/백준

[백준 5525] 파이썬 - ioioi

무룡룡 2021. 12. 30. 17:36

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

 

1. 코드설명

# 50점
n = int(input())
m = int(input())
s = input()
i = 0
count = 0
pn = 'IO'*n + 'I'

while i < m - len(pn) :
    if s[i:i+2*n+1] == pn :
        i += 2
        count += 1
    else:
        i += 1
print(count)
 
# 100점
n = int(input())
m = int(input())
s = input()
answer = 0
i = 0
count = 0

while i <= m:
    if s[i:i+3] == 'IOI':
        i += 2
        count += 1
        if count == n: # ioi 반복이 pn에 도달했을 경우
            answer += 1 
            count -= 1 
    else:
        i += 1
        count = 0

print(answer)
 
 

2. 주의사항

 

pn의 문자열을 직접 생성하고 s 문자열의 인덱스마다 비교하는 1번 방법은 n이 커지면 시간초과가 발생한다

 

따라서 pn은 ioi 의 조합임을 활용하여 시간복잡도 문제를 해결한다.

'알고리즘 > 백준' 카테고리의 다른 글

[백준 9095] 파이썬 - 1,2,3 더하기  (0) 2022.01.03
[백준 7662] 파이썬 - 이중순위  (0) 2022.01.01
[백준 1992] 파이썬 - 쿼드트리  (0) 2021.12.27
[백준 1780] 파이썬 - 종이의 개수  (0) 2021.12.24
[백준]  (0) 2021.12.20
Comments