티스토리 뷰
https://www.acmicpc.net/problem/5525
KMP 알고리즘을 이용하여 패턴이 몇번 나타나는지 찾아준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include <iostream> #include <vector> #include <string> using namespace std; int main() { int n,m; string s,p="I"; cin>>n>>m>>s; for(int i=0;i<n;i++) p+="OI"; n=2*n+1; vector<int> pi(n); pi[0]=0; for(int i=1,j=0;i<n;i++) { while(j>0 && p[i]!=p[j]) j=pi[j-1]; if(p[i]==p[j]) pi[i]=++j; else pi[i]=0; } int ans=0; for(int i=0,j=0;i<m;i++) { while(j>0 && s[i]!=p[j]) j=pi[j-1]; if(s[i]==p[j]) { if(j==n-1) ans++,j=pi[j]; else j++; } } cout<<ans; return 0; } | cs |
'Algorithm > BOJ' 카테고리의 다른 글
13567 로봇 (0) | 2018.04.02 |
---|---|
12026 BOJ 거리 (0) | 2018.03.30 |
1107 리모컨 (0) | 2018.03.14 |
2138 전구와 스위치 (0) | 2018.03.14 |
2573 빙산 (0) | 2018.03.14 |