9251๋ฒ: LCS
LCS(Longest Common Subsequence, ์ต์ฅ ๊ณตํต ๋ถ๋ถ ์์ด)๋ฌธ์ ๋ ๋ ์์ด์ด ์ฃผ์ด์ก์ ๋, ๋ชจ๋์ ๋ถ๋ถ ์์ด์ด ๋๋ ์์ด ์ค ๊ฐ์ฅ ๊ธด ๊ฒ์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค. ์๋ฅผ ๋ค์ด, ACAYKP์ CAPCAK์ LCS๋ ACAK๊ฐ ๋๋ค.
www.acmicpc.net
๋ฌธ์
LCS(Longest Common Subsequence, ์ต์ฅ ๊ณตํต ๋ถ๋ถ ์์ด)๋ฌธ์ ๋ ๋ ์์ด์ด ์ฃผ์ด์ก์ ๋, ๋ชจ๋์ ๋ถ๋ถ ์์ด์ด ๋๋ ์์ด ์ค ๊ฐ์ฅ ๊ธด ๊ฒ์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
์๋ฅผ ๋ค์ด, ACAYKP์ CAPCAK์ LCS๋ ACAK๊ฐ ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค๊ณผ ๋์งธ ์ค์ ๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ๋ฌธ์์ด์ ์ํ๋ฒณ ๋๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ต๋ 1000๊ธ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ ๋ฌธ์์ด์ LCS์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด๊ณผ์
์ด ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ ๊ฒฝ์ฐ์๋ LCS(Longest Common Subsequence, ์ต์ฅ ๊ณตํต ๋ถ๋ถ ์์ด) ๋ผ๊ณ ๋ถ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋
์ ์๊ณ
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์ ๊ทผ์ ํด์ผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ์ ์๋ ๋ฌธ์ ์์๋ค.
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ฆผ์ผ๋ก ์์๋ณด๋ LCS ์๊ณ ๋ฆฌ์ฆ - Longest Common Substring์ Longest Common Subsequence
LCS๋ ์ฃผ๋ก ์ต์ฅ ๊ณตํต ๋ถ๋ถ์์ด(Longest Common Subsequence)์ ๋งํฉ๋๋ค๋ง, ์ต์ฅ ๊ณตํต ๋ฌธ์์ด(Longest Common Substring)์ ๋งํ๊ธฐ๋ ํฉ๋๋ค.
velog.io
๊ทธ๋์ ์์ ๊ฐ์ ๊ธ์ ์ฐธ๊ณ ํ์ฌ ๋ฌธ์ ํ์ด๋ฅผ ์งํํ๊ฒ ๋์๋ค.
LCS ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ณธ ๊ฐ๋ ์
if ( a[i] == b[i] )
alpha[i][j] = alpha[i-1][j-1] + 1;
else
alpha[i][j] = std::max(alpha[i - 1][j], alpha[i][j - 1]);
์์ ๊ฐ์ ์์ผ๋ก ์งํ์ด๋๋ค.
- a์ b์ ์ํ๋ฒณ์ ์๋ก ๋น๊ตํ๋ค.
- ๋น๊ตํ ๊ฐ์ด ์๋ก ๊ฐ๋ค๋ฉด ํด์จ ๊ณผ์ ์ค์ ๊ฐ์ฅ ํฐ ๊ฐ์ + 1 ํด์ค๋ค.
- ๋น๊ตํ ๊ฐ์ด ์๋ก ๋ค๋ฅด๋ค๋ฉด ๋ค๋ฅธ ๋์กฐ๊ตฐ ์ค ๊ฐ์ฅ ํฐ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
์์ ๊ฐ์ ์์ ์๊ณ ๋ฆฌ์ฆ ํ์ด๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด LSC ์๊ณ ๋ฆฌ์ฆ ํ์์ด ๋๋ค๊ณ ์๊ฐ์ํ๋ฉด ๋๋ค. ( ์์ธํ ๋ด์ฉ์ ์์ ๋งํฌ ํ์ธ )
code
#include <iostream>
#include <algorithm>
#include <string>
int alpha[1001][1001];
int main(void)
{
std::string a, b;
int aLen = 0, bLen = 0;
std::cin >> a >> b;
aLen = a.length();
bLen = b.length();
for (int i = 1; i <= aLen; i++) {
for (int j = 1; j <= bLen; j++) {
if (a[i - 1] == b[j - 1])
alpha[i][j] = alpha[i - 1][j - 1] + 1;
else
alpha[i][j] = std::max(alpha[i - 1][j], alpha[i][j - 1]);
}
}
std::cout << alpha[aLen][bLen];
return (0);
}
ํ๊ธฐ
dp๋ ํ์ด๋ ํ์ด๋ ์ด๋ ต๋ค๋ ์๊ฐ์ด ์๊พธ ๋ ๋ค.
๋ณผ๋๋ง๋ค ์๋กญ๊ณ ์ง๋ฆฟํ๋ค.
'Algorithm > ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1904๋ฒ - 01ํ์ผ (C++) (0) | 2023.08.12 |
---|---|
[๋ฐฑ์ค] 2097๋ฒ - ์กฐ์ฝ๋ (C++) (0) | 2023.08.11 |
[๋ฐฑ์ค] 13241๋ฒ - ์ต์๊ณต๋ฐฐ์ (C++) (0) | 2023.08.08 |
[๋ฐฑ์ค] 1236๋ฒ - ์ฑ ์งํค๊ธฐ (C++) (1) | 2023.08.07 |
[๋ฐฑ์ค] 13752๋ฒ - ํ์คํ ๊ทธ๋จ (JS) (0) | 2023.08.06 |