✏️ 문제
문제
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
입력
첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.
출력
첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다.
🔢 알고리즘
#DP #LCS
🤯 풀이 방법
[알고리즘] 그림으로 알아보는 LCS 알고리즘 - Longest Common Substring와 Longest Common Subsequence
LCS는 주로 최장 공통 부분수열(Longest Common Subsequence)을 말합니다만, 최장 공통 문자열(Longest Common Substring)을 말하기도 합니다.
velog.io
참고했당..
어떻게 떠올리는거지?
👾 구현 코드 (자바)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
String s2 = sc.nextLine();
int I = s1.length();
int J = s2.length();
int[][] cnt = new int[I + 1][J + 1];
for (int i = 1; i <= I; i++) {
for (int j = 1; j <= J; j++) {
if (s1.charAt(i - 1) == s2.charAt(j - 1)) {
cnt[i][j] = cnt[i-1][j-1] + 1;
} else {
cnt[i][j] = Math.max(cnt[i-1][j], cnt[i][j-1]);
}
}
}
int ans = 0;
for (int i = 1; i <= I; i++) {
for (int j = 1; j <= J; j++) {
ans = Math.max(ans, cnt[i][j]);
}
}
System.out.println(ans);
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ][DP] 1351. 무한 수열 (java) (0) | 2025.02.21 |
---|---|
[BOJ][DP] 1003. 피보나치 함수 (java / python) (1) | 2025.02.17 |
[BOJ][우선순위큐] 11286. 절댓값 힙 (java) (0) | 2025.02.14 |
[BOJ][Greedy] 11399. ATM (java/python) (0) | 2025.02.11 |
[BOJ] 26043. 식당 메뉴 (java) (3) | 2025.02.07 |