백준5525(파이썬) - IOIOI
resilient
·2021. 6. 5. 15:18
728x90
반응형
https://www.acmicpc.net/problem/5525
- 이 문제는 문자열을 어떻게 나눠서 계산할것이냐를 묻는 문제이다.
- 가장 중요한 부분은 'I' 가 한번 나오면 n의 개수만큼 'OI'가 나온다는 점이다. 이 부분만 잘 생각해 보면 생각보다 간단하게 풀렸다.
- 처음에는 n을 받으면 Pn을 아예 만들어 놓고, m개의 문자열을 한자리씩 돌리면서 Pn과 같으면 카운트 하는 방법을 사용했는데 시간초과가 발생하였다.
import sys
input = sys.stdin.readline
n = int(input())
m = int(input())
s = list(input().rstrip())
flag = 0
cnt = 0
ans = 0
i = 0
while i < m-2:
if s[i] == 'I':
flag = 1
else:
i += 1
if flag == 1:
#I가 나오면 그뒤에 OI 가 몇개가 나오는지에 따라 다르다. N개가 나와야한다.
if s[i+1] == 'O' and s[i+2] == 'I':
cnt += 1
if cnt == n:
ans += 1
#OI 개수맨 세어주기 위해서 cnt가 n개면 ans += 1 해주고 cnt 한개 빼준다.
cnt -= 1
i += 2
else:
# I가 나와도 OI 가 안나오면 다 초기화 해주고 다음 I 카운트로 넘어가준다.
cnt = 0
flag = 0
i += 1
print(ans)
######################################################################## 시간초과 코드
# num = n+(n+1)
# Pn = ""
# for i in range(1,num+1):
# if i % 2 == 1:
# Pn += "I"
# elif i % 2 == 0:
# Pn += "O"
# start = 0
# cnt = 0
# while start<m-num+1:
# temp = ""
# for i in range(start,start+num):
# temp+=s[i]
# if temp == Pn:
# cnt+=1
# start += 1
# print(cnt)
반응형
'자료구조 & 알고리즘 > 백준(Baekjoon)' 카테고리의 다른 글
백준1932(파이썬) - 정수 삼각형 (0) | 2021.06.07 |
---|---|
백준6603(파이썬) - 로또 (0) | 2021.06.06 |
백준1992(파이썬) - 쿼드트리 (0) | 2021.06.04 |
백준1389(파이썬) - 케빈 베이컨의 6단계 법칙 (0) | 2021.06.03 |
백준1780(파이썬) - 종이의 개수 (0) | 2021.06.01 |