๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 5582๋ฒˆ - ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด

by ์•ˆ์ฃผํ˜• 2022. 3. 25.

๋ฌธ์ œ

 

5582๋ฒˆ: ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด

๋‘ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋‘ ๋ฌธ์ž์—ด์— ๋ชจ๋‘ ํฌํ•จ๋œ ๊ฐ€์žฅ ๊ธด ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์–ด๋–ค ๋ฌธ์ž์—ด s์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด t๋ž€, s์— t๊ฐ€ ์—ฐ์†์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค

www.acmicpc.net

 

ํ’€์ด

// 23:14~23:57

#include <iostream>
using namespace std;

int dp[4001][4001];
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    string s1,s2; cin>>s1>>s2;
    int ans = 0;
    
    for(int i=0; i<s1.length(); i++){
        for(int k=0; k<s2.length(); k++){
            if(i==0||k==0){
                if(s1[i]==s2[k]) dp[i][k]=1;
            }
            else if(s1[i]==s2[k]) dp[i][k] = dp[i-1][k-1]+1;
            ans = max(ans, dp[i][k]);
        }
    }
    cout<<ans;
    
}

 

ํ’€์ด

DP๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. 

์œ„ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด ๋ฌธ์ž๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์ขŒ์ธก ์ƒ๋‹จ ๋Œ€๊ฐ์„  ๊ฐ’์—์„œ +1 ํ•ด์ฃผ๋Š” ์‹์œผ๋กœ ์ „๋ถ€ ํƒ์ƒ‰ํ•œ ํ›„, ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ์—ฐ์†ํ•˜๋Š” ๊ฐ€์žฅ ํฐ ๊ธธ์ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€