BOJ_G5_9251
๐ [G5_9251] LCS
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[] str1 = br.readLine().toCharArray();
char[] str2 = br.readLine().toCharArray();
int length_1 = str1.length;
int length_2 = str2.length;
// ๋ฉ๋ชจ๋ฆฌ์ ์ด์
ํ ๋ฐฐ์ด, ๊ณต์งํฉ ํํ์ ์ํด 1๊ฐ์ฉ ์ถ๊ฐ
int[][] dp = new int[length_1+1][length_2+1];
for(int i=1; i<=length_1; i++){
for(int j=1; j<=length_2; j++){
// i-1 ๊ณผ j-1 ์ ๋ฌธ์๊ฐ ๊ฐ๋ค๋ฉด
if(str1[i-1] == str2[j-1]){
// ๋๊ฐ์ ์ (i-1, j-1)์ dp ์ +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.println(dp[length_1][length_2]);
}
}
๐ค ๋์ ์๊ฐ
DP์ LCS ๋ฌธ์ ์ด๋ค.
LCS ์๊ณ ๋ฆฌ์ฆ๋ ์ฒ์ ์ ํด๋ด์ ๊ณ ๋ฏผํ๋ค๊ฐ ๊ฒฐ๊ตญ ๋ธ๋ก๊ทธ๋ฅผ ๋ดค๋ค.
์ค๋ช
์ ๋๋ฌด ๊น๋ํ๊ฒ ํด๋์
์ ์ดํด๊ฐ ์ ๋์๋ค. ์ดํด๊ฐ ์ ์๋๋ค๋ฉด ํ ๋ฒ ์ฝ์ด๋ณด๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ๋ค.
๋ด๊ฐ ์ดํดํ ๋ฐ๋ก๋ ๋จผ์ ๋ ๋ฐฐ์ด์ ํ๋ฅผ ๋ง๋ค์ด ๊ฒน์น๋ฉด ์๋ฅผ ๋ํด ํ ( dp ๋ฐฐ์ด์ ) ๋ฅผ ์ฑ์๋๊ฐ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ์ด์ ๋ฐฑํธ๋ํน ํ์์ผ๋ก ํ๋ฉด ๋ฌธ์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ผ์ชฝ ๋๊ฐ์ ์ ์๋ ๊ฐ์ +1์ ํด์ฃผ๊ณ , ์๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ์ผ์ชฝ๊ฐ๊ณผ ์ค๋ฅธ์ชฝ ๊ฐ์ค ํฐ ๊ฐ์ ๊ฐ์ ธ๊ฐ๋ ๊ท์น์ ๋ฐ๊ฒฌํ ์ ์๋ค.
์ด๊ฒ์ bottom-up ๋ฐฉ๋ฒ์ด๋ค. top-bottom์ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ๊ณ bottom-up์ for๋ฌธ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๊ฐ๋ณต์ก๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ถ๋ถ์์ bottom-up์ ์ฑ๋ฅ์ด ๋ ์ข๋ค.
ํด๋ต์ ๋ณด๊ณ ์ดํดํ๋ฉด ์ฝ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ฌธ์ ๋ค๋ ๋ง์ด ํ์ด๋ด์ผ ๊ฒ ๋ค.
๐ ์ฐธ์กฐ
https://st-lab.tistory.com/139