반응형
📖 문제
https://www.acmicpc.net/problem/1958
💡 풀이 방식
• LCS
문자열이 3개이므로, 3차원 DP로 LCS 길이를 구하면 된다.
- 3중 for문을 이용해 i == j == k인 지점을 찾아 갯수를 센다.
(i, j, k) = max( (i-1, j, k), max( (i, j-1, k), (i, j, k-1) ) )
🔺 코드
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
30
31
32
33
|
import java.util.*;
import java.io.*;
public class Main {
static int[][][] dp; // 3차원 DP
static char[] A,B,C;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
A = br.readLine().toCharArray();
B = br.readLine().toCharArray();
C = br.readLine().toCharArray();
dp = new int[A.length + 1][B.length + 1][C.length + 1];
LCS();
System.out.println(dp[A.length][B.length][C.length]);
}
private static void LCS() {
for(int i = 1 ; i <= A.length ; i++) {
for(int j = 1 ; j <= B.length ; j++) {
for(int k = 1 ; k <= C.length ; k++) {
if(A[i-1] == B[j-1] && B[j-1] == C[k-1])
dp[i][j][k] = dp[i-1][j-1][k-1] + 1;
else
dp[i][j][k] = Math.max(dp[i-1][j][k], Math.max(dp[i][j-1][k], dp[i][j][k-1]));
}
}
}
}
}
|
cs |
💦 어려웠던 점
- 첫 번째 문자열과 두 번째 문자열의 LCS 문자열을 구한 후, 그 결과와 세 번째 문자열의 LCS 길이를 구할 생각을 했었다,,
🧐 새로 알게 된 내용
- 그냥 3차원 dp를 쓰면 된다는 점,,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[백준 1958번] LCS 3 (java)
1958번: LCS 3 첫 줄에는 첫 번째 문자열이, 둘째 줄에는 두 번째 문자열이, 셋째 줄에는 세 번째 문자열이 주어진다. 각 문자열은 알파벳 소문자로 이루어져 있고, 길이는 100보다 작거나 같다. www.ac
lotuslee.tistory.com
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 12919번: A와 B 2 (0) | 2024.06.24 |
---|---|
[백준/JAVA] 2304번: 창고 다각형 (0) | 2024.06.23 |
[백준/JAVA] 20364번: 부동산 다툼 (0) | 2024.06.22 |
[백준/JAVA] 16960번: 스위치와 램프 (0) | 2024.06.20 |
[백준/JAVA] 3029번: 경고 (0) | 2024.06.16 |