[BOJ][๐ก5][๋ฐฑ์ค#05582] ๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ก์ ๋, ๋ ๋ฌธ์์ด์ ๋ชจ๋ ํฌํจ๋ ๊ฐ์ฅ ๊ธด ๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด์ ์ฐพ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ์ด๋ค ๋ฌธ์์ด s์ ๋ถ๋ถ ๋ฌธ์์ด t๋, s์ t๊ฐ ์ฐ์์ผ๋ก ๋ํ๋๋ ๊ฒ์ ๋งํ๋ค. ์๋ฅผ ๋ค์ด, ๋ฌธ์์ด ABRACADABRA์ ๋ถ๋ถ ๋ฌธ์์ด์ ABRA, RAC, D, ACADABRA, ABRACADABRA, ๋น ๋ฌธ์์ด ๋ฑ์ด๋ค. ํ์ง๋ง, ABRC, RAA, BA, K๋ ๋ถ๋ถ ๋ฌธ์์ด์ด ์๋๋ค. ๋ ๋ฌธ์์ด ABRACADABRA์ ECADADABRBCRDARA์ ๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด์ CA, CADA, ADABR, ๋น ๋ฌธ์์ด ๋ฑ์ด ์๋ค. ์ด ์ค์์ ๊ฐ์ฅ ๊ธด ๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด์ ADABR์ด๋ฉฐ, ๊ธธ์ด๋ 5์ด๋ค. ๋, ๋ ๋ฌธ์์ด์ด UPWJCIRUCAXIIRGL์ SBQNYBSBZDFNEV์ธ ๊ฒฝ์ฐ์๋ ๊ฐ์ฅ ๊ธด ๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด์ ๋น ๋ฌธ์์ด์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค๊ณผ ๋์งธ ์ค์ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ๋ฌธ์์ด์ ๋๋ฌธ์๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๊ธธ์ด๋ 1 ์ด์ 4000 ์ดํ์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ ๋ฌธ์์ด์ ๋ชจ๋ ํฌํจ ๋ ๋ถ๋ถ ๋ฌธ์์ด ์ค ๊ฐ์ฅ ๊ธด ๊ฒ์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
์์
์์ 1
์ ๋ ฅ
ABRACADABRA
ECADADABRBCRDARA
์ถ๋ ฅ
5
์์ 2
์ ๋ ฅ
UPWJCIRUCAXIIRGL
SBQNYBSBZDFNEV
์ถ๋ ฅ
0
My Sol
def LCS(i, j):
global memo, maxl
if not i*j: return
elif A[i]==B[j]:
memo[i][j] = memo[i-1][j-1]+1
maxl = max(maxl, memo[i][j])
A = '.'+input()
B = '.'+input()
I, J = len(A), len(B)
maxl = 0
memo = [[0]*J for _ in range(I)]
for i in range(I):
for j in range(J):
LCS(i, j)
print(maxl)
์ฒ์์ผ๋ก DP๋ฅผ ์ด์ฉํด ํ์ด๋ณธ LCS ๋ฌธ์ ์๋ค. ๋ชจ๋ ์๋ฆฌ์ ์ํ๋ฒณ์ ๋ํ์ฌ ์ผ์นํ์ง ์๋๋ค๋ฉด 0, ์ผ์นํ๋ค๋ฉด ๊ฐ๊ฐ์ ์ด์ ์ํ๋ฒณ๊น์ง์ ์ฐ์ ๊ธธ์ด + 1์ ๊ฐ์ memo์ ๋ถ์ฌํ๋ค. ์ด ๋ฌธ์ ๋ ์ต๋ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ฏ๋ก, ์ผ์นํ ๋๋ง๋ค ์ ์ญ์ maxl๊ณผ ๋น๊ตํ์ฌ ๊ฐฑ์ ํด์ฃผ์๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ