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
정답 code
# IOIO
import sys
input = sys.stdin.readline
n = int(input())
m = int(input())
s = input()
ans = 0
cnt = 0
i = 1
while i< m-1:
if s[i-1] == 'I' and s[i] == 'O' and s[i+1] == "I":
cnt += 1
if cnt == n:
cnt -= 1 # IoI 패턴이 이어질경우를 생각해 -1
ans += 1
i += 1
else:
cnt = 0
i += 1
print(ans)
solution
IoI패턴을 한번에 찾아 패턴 하나당 cnt 에 +1을 해준다
그러다 cnt가 n(패턴갯수) 와 같아지면 ans+1을 해주어 카운트한다.
cnt -= 1을 통해 패턴이 이어진다면 누락되지 않도록 해준다.
패턴이 반복되지 않는다면 cnt 를 0으로 만들어주어 초기화 시킨다.
50점 코드 Fail
# IOIO
import sys
input = sys.stdin.readline
n = int(input())
m = int(input())
s = input()
ans = 0
l = 3+(2*n-1)
for i in range(m- l+1):
cnt = 0
b = True
if s[i] == 'I':
for j in range(i+1, i+l-1):
if cnt == 0 and s[j] == 'O':
cnt += 1
elif cnt == 1 and s[j] == 'I':
cnt -= 1
else :
b= False
if b == False:
continue
if b == True:
ans += 1
print(ans)
처음 작성했던 코드는 위와 같은데 너무 단순하게 찾아서그런지 50점이나왔다..
728x90
반응형
'알고리즘 > 백준[baekjoon]' 카테고리의 다른 글
[baekjoon] 백준 7569번 : 토마토 (by python) bfs 너비우선 탐색 (0) | 2022.07.01 |
---|---|
[baekjoon] 백준 6063번 : 카잉 달력 (by python 파이썬) 자세한 설명 (0) | 2022.06.25 |
[baekjoon] 백준 5430번 : AC (by python 파이썬) deque, join (0) | 2022.06.20 |
[baekjoon] 백준 2667번 : 단지번호붙이기 (by python 파이썬) bfs (0) | 2022.06.18 |
[baekjoon] 백준 11726번 : 2*n 타일링 (by python) 다이나믹프로그래밍 (0) | 2022.06.15 |