공부

LCS(Longest Common Subsequence) 알고리즘 (C), 백준 1958 LCS3(JAVA)

고상진 2020. 7. 10. 20:38

이전 글

 

2020/07/10 - [공부] - LCS(Longest Common Subsequence) 알고리즘 (B), 백준 9252 LCS2

 

LCS(Longest Common Subsequence) 알고리즘 (B), 백준 9252 LCS2

이전 글 2020/07/10 - [공부] - LCS(Longest Common Subsequence) 알고리즘 (A), 백준 9251 LCS LCS(Longest Common Subsequence) 알고리즘 (A), 백준 9251 LCS LCS 알고리즘을 공부해보자. 이 글은 백준 문제집 "..

rhtkdwls.tistory.com

에 이어서, 백준 1958 LCS3 문제를 풀어보겠습니다.

 

 

 

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

 

1958번: LCS 3

첫 줄에는 첫 번째 문자열이, 둘째 줄에는 두 번째 문자열이, 셋째 줄에는 세 번째 문자열이 주어진다. (각 문자열의 길이는 100보다 작거나 같다)

www.acmicpc.net

백준 1958 - "LCS 3"

 

이번 문제는 "백준 - LCS2"와 다르지 않습니다. 다만, 문자열이 2개가 아닌 3개라는 것이 다를 뿐...

 

문자열이 2개든, 3개든 10개든 사용하는 논리는 다르지 않습니다.

 

- 경우1) "A[i] = B[j] = C[k]" 인 상황

- 경우2) "경우 1)"이 아닌 모든 상황

 

이라고 보면 됩니다.

 

- 첫 번째 경우는 기존의 LCS와 같습니다.

- 두 번째 경우는, 기존의 max(DP[i - 1][j], DP[i][j - 1])를 변형시키면 됩니다.

 DP[i][j][k] = max(DP[i - 1][j][k], DP[i][j - 1][k], DP[i][j][k - 1])

 

끝)

 

코드 - JAVA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.io.*;
public class Main {
    private static int max(int a, int b, int c) {
        return Math.max(a, Math.max(b, c));
    }
    
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        char[] str1 = br.readLine().toCharArray();
        char[] str2 = br.readLine().toCharArray();
        char[] str3 = br.readLine().toCharArray();
        
        int[][][] dp = new int[str1.length + 1][str2.length + 1][str3.length + 1];
        for (int i = 1; i <= str1.length; i++) {
            for (int j = 1; j <= str2.length; j++) {
                for (int k = 1; k <= str3.length; k++) {
                    if (str1[i - 1== str2[j - 1&& str2[j - 1== str3[k - 1]) {
                        dp[i][j][k] = dp[i - 1][j - 1][k - 1+ 1;
                    } else {
                        dp[i][j][k] = max(dp[i - 1][j][k], dp[i][j - 1][k], dp[i][j][k - 1]);
                    }
                }
            }
        }
        System.out.print(dp[str1.length][str2.length][str3.length]);
    }
}
 
cs

 

다음글

2020/07/10 - [공부] - LCS(Longest Common Subsequence) 알고리즘 (D), 백준 13711 LCS4(JAVA)

 

LCS(Longest Common Subsequence) 알고리즘 (D), 백준 13711 LCS4(JAVA)

이전 글 2020/07/10 - [공부] - LCS(Longest Common Subsequence) 알고리즘 (C), 백준 1958 LCS3(JAVA) LCS(Longest Common Subsequence) 알고리즘 (C), 백준 1958 LCS3(JAVA) 이전 글 2020/07/10 - [공부] - LCS(..

rhtkdwls.tistory.com