반응형
문자열 문제로 효율적으로 문자열 탐색을 진행했어야 했다.
그러나 뾰족한 수가 떠올르지 않았던 나는
무한 IF로 분기점을 만들어 어찌하여 구현을 하였다.
std = int(input())
ttl = int(input())
call = input()
rst = 0
cyc = False
stg = 0
tmp =0
for i in range(ttl):
if call[i]=='I' and not cyc: #맨처음 I를 발견했을 시
cyc = True #탐색 시작
stg = 1 #전문자 I로 갱신
elif call[i]=='O' and cyc and stg: #O발견, 탐색중이고 전 문자가 I일때
stg = 0 #전문자 O로 갱신
elif call[i]=='I' and cyc and not stg: #I발견, 탐색중이고 전 문자가 O일때
tmp+=1 #IOI 한덩이를 발견해서 임시 덩어리 개수 갱신
stg = 1 #전문자 I로 갱신
elif call[i]=="I" and cyc and stg: #I를 발견했지만, 전 문자가 I일때
if tmp>=std: #여태까지의 덩어리 개수들이 찾는 덩어리보다 같거나 클때
rst+=tmp-std+1 #결과값 갱신(예를 들어 4덩어리 찾고 3덩어리가 기준일때 찾은 덩어리-필요한 덩어리+1하면 갯수를 구할 수 있다.)
tmp = 0 #덩어리 개수 초기화
elif call[i]=="O" and cyc and not stg: #O를 발견했지만, 전 문자가 O일때
cyc = False #탐색중 아님
stg = 0 #전문자 O
if tmp>=std:
rst+=tmp-std+1
tmp = 0
if tmp>=std: #탐색 끝나고도 아직 갱신 못한 값들이 있을 때
rst+=tmp-std+1
print(rst)
정말 너무 어렵게 풀었다.
다른 사람(edhz8888)의 아주 간단한 풀이를 찾아보았다.
https://www.acmicpc.net/source/54768987
로그인
www.acmicpc.net
더보기
N,M,S,n,answer,i=int(input()),int(input()),input(),0,0,0
while i<=M-3: #IOI 3자리 끝을 맞추기 위해
if S[i:i+3]=='IOI': #IOI찾았을 때
n+=1 #임시 덩어리 값 증가
i+=1 #인덱스 값 증가
if n==N:answer+=1;n-=1 #결과값 증가 및 임시 덩어리 1빼서 연속된 수 나오면 바로 갱신 가능하게 만듦
else:n=0 #연속되지 않기에 초기화
i+=1 #인덱스 값 증가(이 때문에 IOI연속된 값은 바로 O를 건너뛰어서 연속된 값 찾기 가능)
print(answer)
반응형
'알고리즘 문제들 으악 > 백준' 카테고리의 다른 글
| [python]6064번 카잉 달력 (0) | 2023.01.29 |
|---|---|
| [python]3273번 두 수의 합, 투 포인터 알고리즘 (0) | 2023.01.29 |
| [python]1389번 케빈 베이컨 6단계 법칙,BFS와 플로이드 알고리즘 (0) | 2023.01.27 |
| [python]🔥🔥🔥11066번 파일합치기, 그저 어렵다 (0) | 2023.01.25 |
| [python]11727번 2×n 타일링 2 (0) | 2023.01.25 |