SMALL

https://www.acmicpc.net/problem/16916

 

16916번: 부분 문자열

첫째 줄에 문자열 S, 둘째 줄에 문자열 P가 주어진다. 두 문자열은 빈 문자열이 아니며, 길이는 100만을 넘지 않는다. 또, 알파벳 소문자로만 이루어져 있다.

www.acmicpc.net


  • 문제


  • 문제풀이

KMP알고리즘을 사용해서 문장안에  찾으려는 패턴이 있다면 1을 출력해주고 없다면 0을 출력한다.

 

 

[알고리즘]KMP 알고리즘

KMP 알고리즘이란? KMP 알고리즘은 문자열 검색 알고리즘 중 하나로, 문자열에서 특정 패턴을 찾는데 사용됩니다. KMP 알고리즘은 문자열 내에서 특정 패턴이 나타나는 위치를 찾을 때, 일반적으로

yongyongyee.tistory.com

 

 


  • 코드 1
using System;

class GFG
{
    public static bool print;
    void KMPSearch(string pat, string txt)
    {
        int M = pat.Length;
        int N = txt.Length;

        int[] lps = new int[M];
        int j = 0; 

        computeLPSArray(pat, M, lps);

        int i = 0;
        while (i < N)
        {
            if (pat[j] == txt[i])
            {
                j++;
                i++;
            }
            if (j == M)
            {
               
                print = true;
                break;
            }

            else if (i < N && pat[j] != txt[i])
            {
   
                if (j != 0)
                    j = lps[j - 1];
                else
                    i = i + 1;
            }
        }
        if (print)
        {
            Console.WriteLine(1);
        }
        else
        {
            Console.WriteLine(0);
        }
    }

    void computeLPSArray(string pat, int M, int[] lps)
    {

        int len = 0;
        int i = 1;
        lps[0] = 0; 

 
        while (i < M)
        {
            if (pat[i] == pat[len])
            {
                len++;
                lps[i] = len;
                i++;
            }
            else 
            {
                
                if (len != 0)
                {
                    len = lps[len - 1];

                   
                }
                else
                {
                    lps[i] = len;
                    i++;
                }
            }
        }
    }

   
    public static void Main()
    {
        string txt = (Console.ReadLine());

        string pat = (Console.ReadLine());
        print = false;
        new GFG().KMPSearch(pat, txt);
    }
}

 


  • 후기

KMP알고리즘은 만능인가?

LIST

'백준 > C#' 카테고리의 다른 글

[C#]백준 1436번: 영화감독 숌  (0) 2023.03.13
[C#]백준 2231번: 분해합  (0) 2023.03.13
[C#]백준 1032번: 명령 프롬프트  (0) 2023.03.13
[C#]백준 10809번: 알파벳 찾기  (2) 2023.03.13
[C#]백준 2252번: 줄 세우기  (0) 2023.03.08

+ Recent posts