티스토리 뷰

Algorithm/BOJ

5525 IOIOI

henry1214 2018. 3. 14. 19:01

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
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday