PS/Baekjoon Online Judge

[백준 9251] LCS [C]

kimyoungrok 2021. 8. 24. 10:14

백준 - 9251


풀이

첫째 줄에 입력받은 문자열의 각 문자와 둘째 줄에 입력받은 문자열간의 LCS를 구하는 방식으로 풀이했다.

(j, i)번째에 각 문자열의 문자가 동일하다면, (j-1, i-1)번째의 LCS보다 1만큼 길다.

만약 문자가 같지않다면, 이전 LCS의 값 중 큰 값과 일치한다.


소스코드

#include <stdio.h>
#define max(a, b) a > b ? a : b
int dp[1001][1001];
int main(){
    char str[2][1001];
    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", dp[j][i]);
}

출처

 

9251번: LCS

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

www.acmicpc.net

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

[백준 9252] LCS 2 [C]  (0) 2021.08.24
[백준 9935] 문자열 폭발 [C]  (0) 2021.08.24
[백준 15624] 피보나치 수 7 [C]  (0) 2021.08.24
[백준 13075] Fibonacci Sequence [C]  (0) 2021.08.23
[백준 7677] Fibonacci [C]  (0) 2021.08.23