[Gold V] LCS - 9251
성능 요약
메모리: 15940 KB, 시간: 108 ms
분류
다이나믹 프로그래밍, 문자열
제출 일자
2023년 11월 24일 10:54:51
문제 설명
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.
예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
입력
첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다.
출력
첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다.
1. DP로 풀 수 있는 대표적인 예제
2. 천천히 확장해나가면서 문제를 풀어나간다.
3. Math.max(이전 수열에 현재 수열을 추가하는 경우, 현재 수열)을 비교해준다.
4. 만약 같다면 + 1로 비교해줌
5. DP라서 최대값은 제일 마지막 배열에 마지막 값을 존재함
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] a = br.readLine().toCharArray();
char[] b = br.readLine().toCharArray();
int[][] dp = new int[a.length+1][b.length+1];
for(int i = 1; i < dp.length; i++){
for(int j = 1; j < dp[i].length; j++){
if(a[i-1] == b[j-1]){
dp[i][j] = Math.max(dp[i-1][j-1]+1,dp[i][j-1]);
}else{
dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]);
}
}
}
System.out.println(dp[a.length][b.length]);
}
}
'알고리즘 - Baekjoon > Gold' 카테고리의 다른 글
[백준] 12851번 : 숨바꼭질2 Gold4(골드4) - JAVA[자바] (0) | 2023.11.25 |
---|---|
[백준] 11054번 : 가장 긴 바이토닉 부분 수열 Gold4(골드4) - JAVA[자바] (0) | 2023.11.25 |
[백준] 12886번 : 돌 그룹 Gold5(골드 5) - JAVA[자바] (1) | 2023.11.21 |
[백준] 16928번 : 뱀과 사다리 게임 Gold5(골드 5) - JAVA[자바] (0) | 2023.11.17 |
[백준] 12865번 : 평범한 배낭 Gold V(골드5) - JAVA[자바] (1) | 2023.11.16 |