카테고리 없음

백준 5582 공통 부분 문자열

miffy짱 2023. 2. 27. 17:26
반응형

백준 5582 공통 부분 문자열


저번 주 스터디 문제였는데 어려울거 같아서 넘어갔다가, 오늘 사람들이 나누는 이야기를 엿듣고 보니 그렇게 어렵진 않을거 같아서 도전해 보았다. 실제로도 좀 힌트를 가지고 접근하니 할만 하다!

  • dp 를 이용해 풀었고, 공통 부분 문자열이므로 현재 만약 첫번째 문장 인덱스 i 와 두번째 문장 인덱스 j 가 가리키는 값이 서로 같은 문자라면, 그 이전의 dp 값에 +1 해주면 된다.

  • 0 보다 큰 경우에 대해서만 따로 값 1을 주겠다는 예외 처리를 해주었고, 그 외에 따로 신경 써야 할 부분은 없었다.

#include <iostream>
#include <vector>
#include <math.h>
#include <string.h>
#include <algorithm>

using namespace std;

int dp[4002][4002];
int max_val = 0;
int main()
{
    string a, b;
    cin>>a;
    cin>>b;

    for (int i = 0; i < a.size(); i++)
    {
        for (int j = 0; j < b.size(); j++)
        {
            if (a[i] == b[j])
            {
                if (i >= 1 && j >= 1)
                {
                    dp[i][j] = dp[i-1][j-1] + 1;
                    max_val = max(dp[i][j], max_val);

                } else
                {
                    dp[i][j] = 1;
                    max_val = max(dp[i][j], max_val);
                }
            }
            else
            {
                dp[i][j] = 0;
            }


        }
    }
    cout<<max_val<<"\n";
    return 0;
}