https://www.acmicpc.net/problem/9251
9251번: LCS
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
📌 작성한 코드
// 9251
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "Beakjoon/Gold/test.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
const first = input[0];
const second = input[1];
const dp = Array.from({ length: first.length + 1 }, () => new Array(second.length + 1).fill(0));
let max = 0;
for (let i = 1; i <= first.length; i++) {
for (let j = 1; j <= second.length; j++) {
if (first[i - 1] === second[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
}
if (max < dp[i][j]) max = dp[i][j];
}
}
console.log(max);
📌 설명
최장 공통 부분 수열(LCS)을 구하는 문제이다.
dp를 사용하여 현재까지 확인한 최장 공통 부분 수열의 길이에, 현재 문자를 추가할 수 있는지 여부에 따라 값을 업데이트 하면 된다.
💡 참고
최장 공통 부분 수열을 설명하는 더없이 완벽한 글이 있기에 공유한다.
[알고리즘] 그림으로 알아보는 LCS 알고리즘 - Longest Common Substring와 Longest Common Subsequence
LCS는 주로 최장 공통 부분수열(Longest Common Subsequence)을 말합니다만, 최장 공통 문자열(Longest Common Substring)을 말하기도 합니다.
velog.io
✅ 성공

'알고리즘 > 백준' 카테고리의 다른 글
| [JavaScript/DP] 백준 골드 5 : 2294 - 동전 2 (1) | 2024.03.09 |
|---|---|
| [JavaScript/DP] 백준 골드 5 : 9084 - 동전 (0) | 2024.03.08 |
| [JavaScript/DFS] 백준 골드 5 : 1240 - 노드 사이의 거리 (0) | 2024.03.06 |
| [JavaScript/구현] 백준 골드 3 : 14890 - 경사로 (1) | 2024.03.06 |
| [JavaScript/DP] 백준 실버 1 : 1890 - 점프 (3) | 2024.03.04 |