PS/Baekjoon Online Judge

[백준 9252] LCS 2 [C]

kimyoungrok 2021. 8. 24. 19:15

백준 - 9252


풀이

"백준 9251, LCS"에서 LCS를 출력하기위해 사용했던 j, i값을 이용해 문자열이 동일한 경우를 Recursion방식으로 찾았다.


소스코드

#include <stdio.h>
#define max(a, b) a > b ? a : b
int dp[1001][1001];
char str[2][1001];
void LCS(int j, int i){
    if (dp[j][i])
        if (str[0][i-1] == str[1][j-1]){
            LCS(j-1, i-1);
            printf("%c", str[0][i-1]);
        }else dp[j-1][i] > dp[j][i-1] ? LCS(j-1, i) : LCS(j, i-1);
}
int main(){
    scanf("%s %s", &str[0], &str[1]);
    int i, j;
    for (i = 0; str[0][i]; i++)
        for (j = 0; str[1][j]; j++)
            if (str[0][i] == str[1][j]) dp[j+1][i+1] = dp[j][i] +1;
            else dp[j+1][i+1] = max(dp[j][i+1], dp[j+1][i]);
			
    printf("%d\n", dp[j][i]);
    LCS(j, i);
}

출처

 

9252번: LCS 2

LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.

www.acmicpc.net

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 11758] CCW [C]  (0) 2021.08.25
[백준 9527] 1의 개수 세기 [C]  (0) 2021.08.25
[백준 9935] 문자열 폭발 [C]  (0) 2021.08.24
[백준 9251] LCS [C]  (0) 2021.08.24
[백준 15624] 피보나치 수 7 [C]  (0) 2021.08.24