https://www.acmicpc.net/problem/9251
๋ฌธ์ ๋ ๋ ๋ฌธ์์ด์ ๊ฒน์น๋ ๋ถ๋ถ ์์ด ์ค์์ ๊ฐ์ฅ ๊ธธ์ด๊ฐ ๊ธด ์์ด์ ๊ธธ์ด๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
ํด๋น ๋ฌธ์ ์ด์ ๋ฌธ์ ์ ๋์ผํ๊ฒ Dynamic Programming์ผ๋ก ํด๊ฒฐํ๋ ๋ฌธ์ ์ด๋ค.
๋ฌธ์ ํ์ด๋ ๋ค์ ํ์ ๊ฐ์ ์์ผ๋ก ํด๊ฒฐํ์๋ค.
1. 2๊ฐ์ ์์ด์ ๋ฌธ์๋ค์ ํตํด 2์ฐจ์ ๋ฐฐ์ด(dp)์ ์์ฑํ๋ค.
2. ๋ฌธ์์ด B์ ์๋ ๋ฌธ์๊ฐ ๋ฌธ์์ด A์ ์๋์ง ์๋ฆฌ๋ฅผ ํ๋์ฉ ์ฒดํฌํ๋ฉฐ 2์ค for๋ฌธ์ ๋๊ฒ๋๋ค.
3. ๋ง์ฝ ๊ฐ์ ๋ฌธ์๊ฐ ํ์ธ๋๋ค๋ฉด ๋ฐฐ์ด์์ ํด๋น ๊ทธ ๋ฌธ์๊ฐ ๋์ค๊ธฐ ์ ๊น์ง ๊ฐ์ฅ ํฌ๊ธฐ๊ฐ ํฐ ์๋ฅผ ์ฐพ๋๋ค.
4. 3์์ ์ฐพ์ ๊ฐ์ฅ ํฐ ์+1์ด ํ์ฌ ๊ทธ ๋ฌธ์์ ์์น์ ์ ์ฅ๋ ๊ฐ๋ณด๋ค ๋ ํฌ๋ค๋ฉด ๊ฐ์ ์
๋ฐ์ดํธ ํด์ค๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] strArr1 = br.readLine().toCharArray();
char[] strArr2 = br.readLine().toCharArray();
int[][] dp = new int[strArr2.length+1][strArr1.length];
for (int i=0; i< strArr1.length; i++) {
dp[0][i] = 0;
}
for (int i=0; i<strArr2.length ; i++) {
int max = 0;
for (int j=0; j<strArr1.length; j++) {
dp[i+1][j] = dp[i][j];
if (strArr2[i] == strArr1[j]) {
for (int k=0; k< j; k++) {
if (dp[i][k] > max) max = dp[i][k];
}
dp[i+1][j] = dp[i+1][j] < max+1 ? max+1: dp[i+1][j];
}
}
}
// ์ต์ข
๊ฒฐ๊ณผ(max๊ฐ) ๋์ถ
int max = 0;
for (int j=0; j<strArr1.length; j++) {
if (dp[strArr2.length][j] > max) max = dp[strArr2.length][j];
}
System.out.println(max);
}
}