[ 문제 ]
[ 접근방법 ]
KMP 알고리즘을 활용한다.
이를 통해 O(N + M)에 해결 가능하다.
[ 소스코드 ]
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n, m, ans = 0;
string a, b;
cin >> n >> m >> a;
b = "I";
for(int i = 0; i < n; i++)b += "OI";
n = 2 * n + 1;
vector<int> kmp(n);
for(int i = 1, j = 0; i < n; i++){
while(j && b[i] != b[j])j = kmp[j - 1];
if(b[i] == b[j])kmp[i] = ++j;
}
for(int i = 0, j = 0; i < m; i++){
while(j && a[i] != b[j])j = kmp[j - 1];
if(a[i] == b[j])j++;
if(j == n){
ans++;
j = kmp[j - 1];
}
}
cout << ans;
return 0;
}
'PS' 카테고리의 다른 글
[ 백준 / C++ ] 9019 : DSLR (0) | 2024.08.16 |
---|---|
[ 백준 / C++ ] 6064 : 카잉 달력 (0) | 2024.08.14 |
[ 백준 / C++ ] 30804 : 과일 탕후루 (0) | 2024.08.12 |
[ 백준 / C++ ] 21736 : 헌내기는 친구가 필요해 (0) | 2024.08.09 |
[ 백준 / C++ ] 28702 : FizzBuzz (0) | 2024.08.08 |