๋ค์ด๊ฐ๊ธฐ์ ์์ LCS๋ฅผ ๊ตฌ๋ณํ๋๋ก ํ์. ์ผ๋ฐ์ ์ผ๋ก LCS๋ผ๊ณ ํ๋ฉด ์ต์ฅ๊ณตํต๋ถ๋ถ์์ด(Longest Common Subsequence)์ ๋ปํ์ง๋ง, ์ต์ฅ๊ณตํต ๋ฌธ์์ด(Longest Common Sustring)๋ LCS๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค. ๋์ ์ฐจ์ด์ ์ ๊ตฌํ๊ณ ์ ํ๋ ๋ถ๋ถ ๋ฌธ์์ด์ ์ฐ์์ฑ์ด๋ผ๊ณ ํ ์ ์๋ค.
์ด๋ฒ ๊ธ์์๋ ์ต์ฅ๊ณตํต ๋ฌธ์์ด(Longest Common Substring)์ ๋ํด์ ๋จผ์ ์์๋ณด์
1. ๊ฐ๋ ๐ฆ
์ต์ฅ๊ณตํต๋ถ๋ถ๋ฌธ์์ด(LCS)์ ์ฐ์๋ ๋ถ๋ถ ๋ฌธ์์ด ์ค ๊ฐ์ฅ ๊ธธ์ด๊ฐ ๊ธด ๋ฌธ์์ด์ ๋งํ๋ค.
2. ๋์ ๋ฐฉ์ ๐
๋์ ๋ฐฉ์์ DP๋ฅผ ์ด์ฉํ๋ค. ๋ฌธ์์ด A์ ๋ฌธ์์ด B๊ฐ ์ฃผ์ด์ก๋ค๊ณ ํ์.
- ๋ฌธ์์ด A์ ๋ฌธ์์ด B๋ฅผ ํ ๊ธ์์ฉ ๋น๊ตํ๋ค.
- ๋น๊ตํ๋ ๋ฌธ์๊ฐ ๊ฐ๋ค๋ฉด DP[i][j]๋ DP[i-1][j-1] + 1์ด ๋๋ค.
๋น๊ตํ๋ ๋ฌธ์๊ฐ ๋ค๋ฅด๋ค๋ฉด DP[i][j]์ 0์ ํ์ํ๋ค. - 1๋ฒ๊ณผ 2๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
์์ํ ์ ์๋ฏ์ด ์์์ ๋งํ DP[i][j]๋ ๋ฌธ์์ด A๋ i๋ฒ์งธ๊น์ง ๋ฌธ์์ด B๋ j๋ฒ์งธ๊น์ง ๊ณ ๋ คํ์์ ๊ฒฝ์ฐ์ ์ป์ ์ต์ฅ๊ณตํต๋ถ๋ถ๋ฌธ์์ด์ ๊ธธ์ด์ด๋ค. i์ j๋ 1๋ถํฐ ๋ฌธ์์ด์ ๊ธธ์ด๊น์ง ์ํ๋ฅผ ํ๊ณ i ๋๋ j๊ฐ 0์ธ ์ฅ์์ DP๊ฐ์ 0์ผ๋ก ์ค์ ํ๋ค.
- ๋น๊ตํ๋ ๋ฌธ์๊ฐ ๊ฐ์ ๋ 'DP[i][j] = DP[i-1][j-1] + 1'์ ํ๋ ์ด์
์ด์ ์ํฉ๊น์ง์ ์ต์ฅ๊ณตํต๋ถ๋ถ๋ฌธ์์ด์ ํ์ฌ ๋น๊ต๋ ๊ฐ์ ๋ฌธ์๋ฅผ ์ถ๊ฐํ๋ ๊ณผ์ ์ด๋ค. - ๋น๊ตํ๋ ๋ฌธ์๊ฐ ๋ค๋ฅผ ๋ 'DP[i][j] = 0'์ด ๋๋ ์ด์
์ต์ฅ๊ณตํต๋ถ๋ถ๋ฌธ์์ด์ ์ฐ์๋ ๋ถ๋ถ ๋ฌธ์์ด์ ์ ์ ๋ก ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฐ์์ฑ์ด ์์ด์ง๋ฉด 0์ผ๋ก ์ด๊ธฐํํด์ผ ํ๋ค.
'ABCDEF'์ 'GBCDFE'๋ฅผ ์ด์ฉํ์ฌ LCS๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๊ทธ๋ฆผ์ ์ด์ฉํ์ฌ ์ดํดํด ๋ณด์.
3. ๊ตฌํ(JAVA) ๐ฆข
i ๋๋ j๊ฐ 0์ด๋ผ๋ฉด DP(๋น๊ต๋ฅผ ํ์ง ์์ ์ํฉ)์ ๊ฐ์ด 0์ด๋ผ๋ ๊ฒ๋ง ์ฃผ์ํด์ ์ฝ๋๋ฅผ ๋ณด๋๋ก ํ์.
public static void main(String[] args) {
String A = "ABCDEF";
String B = "GBCDFE";
int aStrLen = A.length();
int bStrLen = B.length();
// LCS์ ๊ธธ์ด
int maxLen = 0;
int[][] DP = new int[aStrLen + 1][bStrLen + 1];
for(int i = 1; i <= aStrLen; i++) {
for(int j = 1; j <= bStrLen; j++) {
// ๋น๊ตํ๋ ๋ฌธ์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ
if(A.charAt(i - 1) == B.charAt(j - 1)) {
DP[i][j] = DP[i - 1][j - 1] + 1;
maxLen = Math.max(maxLen, DP[i][j]);
}
// ๋น๊ตํ๋ ๋ฌธ์๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ
else {
DP[i][j] = 0;
}
}
}
System.out.println(maxLen);
}
ํด๋น ๊ธ์ emplam27 ๋์ '๊ทธ๋ฆผ์ผ๋ก ์์๋ณด๋ LCS ์๊ณ ๋ฆฌ์ฆ'์ ์ฐธ๊ณ ํ์์ต๋๋ค.
'๐ ์๊ณ ๋ฆฌ์ฆ > ETC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ต์ฅ๊ณตํต๋ถ๋ถ์์ด(Longest Common Subsequence - LCS) (0) | 2023.04.01 |
---|---|
์ต์ฅ์ฆ๊ฐ๋ถ๋ถ์์ด(Longest Increasing Subsequence - LIS) (0) | 2023.04.01 |
์๋ก์ ์งํฉ(Disjoint-sets) (0) | 2023.03.01 |