티스토리 뷰
문제
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.
예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
입력
첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.
출력
첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다.
DP[i][j] = X[0 ... i]Y[0...j의 공통 부분 수열의 최대 길이
두 문자열의 길이를 조금씩 늘려 가며 확인하여, 공통 부분 수열(LCS)의 최대 길이를 계산한다.
점화식
if X[i] == Y[j]
DP[i][j] = DP[i-1][j-1] + 1
else
DP[i][j] = Math.max(DP[i][j-1], DP[i-1][j])
초기 DP 테이블은 0으로 만들어주자.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// StringTokenizer st = new StringTokenizer(br.readLine());
//int N = Integer.parseInt(st.nextToken());
String A = br.readLine();
String B = br.readLine();
int ASize = A.length();
int BSize = B.length();
int[][] dp = new int[ASize + 1][BSize + 1];
for (int i = 1; i <= ASize; i++) {
char a = A.charAt(i - 1);
for (int j = 1; j <= BSize; j++) {
char b = B.charAt(j - 1);
if (a == b) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = Math.max(dp[i][j - 1], dp[i - 1][j]);
}
}
}
int answer = Integer.MIN_VALUE;
for (int i = 1; i <= ASize; i++) {
for (int j = 1; j <= BSize; j++) {
answer = Math.max(answer, dp[i][j]);
}
}
System.out.println(answer);
}
}
[알고리즘] 그림으로 알아보는 LCS 알고리즘 - Longest Common Substring와 Longest Common Subsequence
'알고리즘' 카테고리의 다른 글
BOJ1260 DFS와 BFS java (0) | 2022.01.28 |
---|---|
BOJ1495 기타리스트 java (0) | 2022.01.25 |
BOJ11053 가장 긴 증가하는 부분 수열 java (0) | 2022.01.24 |
BOJ12865 평범한 배낭 java (0) | 2022.01.23 |
BOJ1904 01타일 java (0) | 2022.01.23 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Olympiad
- BAEKJOON
- 클린 아키텍처
- AWS
- 이팩티브 자바
- Spring
- node.js
- BOJ
- 디자인 패턴
- 백준
- Algorithm
- C++
- 코테
- 디자인패턴
- Spring Boot
- 테라폼
- 정규표현식
- 이펙티브 자바
- Kotlin
- programmers
- kotest
- MSA
- 프로그래머스
- 클린 코드
- 객체지향
- JPA
- 알고리즘
- Java
- kkoon9
- Effective 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 |
글 보관함