PS
[백준] 9251번 : LCS[Java]
devkdh
2025. 7. 8. 12:49

#풀이
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str1 = br.readLine();
String str2 = br.readLine();
int[][] dp = new int[str1.length()+1][str2.length()+1];
int max = 0;
for(int i = 1; i<str1.length()+1; i++){
for(int k = 1; k<str2.length()+1; k++){
if(str1.charAt(i-1)==str2.charAt(k-1)){
dp[i][k]=dp[i-1][k-1]+1;
}
else dp[i][k] = Math.max(dp[i-1][k],dp[i][k-1]);
if(max<dp[i][k])max = dp[i][k];
}
}
System.out.println(max);
}
}
#성능

#정리
처음에 그리디로 접근했다가 틀렸다.
알고리즘 분류를 보고 DP로 접근했다.
점화식은 다음과 같다.
비교하는 문자가 같은경우 -> dp[i][j] = dp[i-1][j-1]+1
비교하는 문자가 다른경우 -> dp[i][j] = max(dp[i-1][j],dp[i][j-1])
시간이 지나고 다시 풀어봐야 할 것 같다.