이번에 풀어본 문제는
백준 9251번 LCS 입니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int [][] dp;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String tmp1 = br.readLine();
String tmp2 = br.readLine();
String [] fst = tmp1.split("");
String [] sec = tmp2.split("");
dp = new int[fst.length+1][sec.length+1];
for(int i = 1; i < dp.length; ++i)
{
for(int j = 1; j < dp[0].length; ++j)
{
if(fst[i-1].equals(sec[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]);
}
}
System.out.print(dp[fst.length][sec.length]);
}
}
LCS(Longest Common Subsequence, 최장 공통 부분 수열)을 찾는 문제인데, 두 문자열을 비교하는 간단한 문제이다 보니 dp를 활용한 풀이법을 이해하면 가볍게 넘어갈 수 있습니다.
이번 문제는 예전에 유튜브에서 dp풀이법을 봤어서 쉽게 풀이할 수 있었습니다!