์ด์ฐ ๋๋ฌด ์ด๋ ค์ ๋ค
๋ฌธ์ ์ ๋ฐฑ๋ฒ ์ฝ์ด๋ ๋์ฒด ์ด๊ฑธ ์ด๋ป๊ฒ ํ์ด์ผํ๋ ๋ชจ๋ฅด๊ฒ ๋.. ๊ทธ๋ฐ...
๊ทธ๋์ ์ฐพ์๋ดค๋๋ฐ DP์ ์ ๋ช ํ ๋ฌธ์ ๋ผ๋๋ผ LCS..
์๋๋๋ค๋ฅผ๊น ํ์ด ๋ฐฉ๋ฒ์ ๋ดค๋๋ฐ๋ ์ดํดํ๋๋ฐ ํ์ฐธ ๊ฑธ๋ ธ๋ค
๋ค๋ค ์... ์ด๋ ๊ฒ ํธ๋๊ตฌ๋๋ง ์ค๋ช ํ๊ณ ์ ์ด๋ ๊ฒ ํธ๋์ง๋ ์ค๋ช ์ ์ํด์ฃผ์ ๊ฐ์ง๊ณ ๋๋ฌด ๊ดด๋ก์ ๋ค
๋ญ ์ค๋ง ๋ค๋ค ํ์ด ๋ฐฉ๋ฒ์ ๋ณด๋ฉด ๋ฒ์ฉ ํ๊ณ ์ด์ ๊ฐ ์ดํด๋๋๊ฑด๊ฐ ๋๋ง ์๋๋๊ฑด๊ฐ ใดใ ใฑ
์๋ฌดํผ ๋จธ๋ฆฌ ์ฅ์ด์ธ๋งค๊ณ ์ดํดํ๋ค
๋๊ฐ์ ๋ฌธ์์ด์ด ์๋ค
0์ผ๋ก ์ฑ์์ง ํ๋ฅผ ์ฑ์๋๊ฐ๋ ๋ฐฉ์์ผ๋ก ๊ณ์ฐํด๋ณด์
๋ฌธ์ ์ ์์ ๋ก ์ฃผ์ด์ง ACAYKP์ CAPCAK์ ๊ฒฝ์ฐ
๊ฐ ์นธ์๋ ๋งจ ์์ ์ํ๋ฒณ๊ณผ ๋งจ ์ผ์ชฝ์ ์ํ๋ฒณ์ด ์ถ๊ฐ๋์์ ๋์ LCS ๊ธธ์ด๋ฅผ ์ ๋๋ค
์ฆ (4, 4)์๋ AC์ A๊ฐ ์ถ๊ฐ๋์์ ๋, CA์ P๊ฐ ์ถ๊ฐ๋์์ ๋์ LCS ๊ธธ์ด๋ฅผ ์ ์ ๊ฒ์ด๋ค
(2, 2) : A์ C๋ฅผ ๋น๊ตํ๋ค. ์ค๋ณต๋๋ ์์ด์ด ์์ผ๋ฏ๋ก 0
(2, 3) : AC์ C๋ฅผ ๋น๊ตํ๋ค. C๊ฐ ์ค๋ณต๋๋ค. 1
(2, 4) : ACA์ C๋ฅผ ๋น๊ตํ๋ค. ์ด์ ์ ์ด๋ฏธ C๊ฐ ์ค๋ณต๋์ด 1์ด ๋์์ผ๋ฏ๋ก 1
(2, 5) : ACAY์ C๋ฅผ ๋น๊ตํ๋ค. ์ด์ ์ ์ด๋ฏธ C๊ฐ ์ค๋ณต๋์ด 1์ด ๋์์ผ๋ฏ๋ก 1
(2, 6) : ACAYK์ C๋ฅผ ๋น๊ตํ๋ค. ์ด์ ์ ์ด๋ฏธ C๊ฐ ์ค๋ณต๋์ด 1์ด ๋์์ผ๋ฏ๋ก 1
(2, 7) : ACAYKP์ C๋ฅผ ๋น๊ตํ๋ค. ์ด์ ์ ์ด๋ฏธ C๊ฐ ์ค๋ณต๋์ด 1์ด ๋์์ผ๋ฏ๋ก 1
(3, 2) : A์ CA๋ฅผ ๋น๊ตํ๋ค. A๊ฐ ์ค๋ณต๋๋ค. 1
(3, 3) : AC์ CA๋ฅผ ๋น๊ตํ๋ค. ์ด์ ์ ์ด๋ฏธ A๊ฐ ์ค๋ณต๋์ด 1์ด ๋์๋ฏ๋ก 1. C๋ ์ค๋ณต๋์ง๋ง CA์ AC๋ ์ค๋ณต๋์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ 1
(3, 4) : ACA์ CA๋ฅผ ๋น๊ตํ๋ค. CA๊ฐ ์ค๋ณต๋๋ค. 2
(3, 5) : ACAY์ CA๋ฅผ ๋น๊ตํ๋ค. ์ด์ ์ ์ด๋ฏธ CA๊ฐ ์ค๋ณต๋์ด 2์ด ๋์์ผ๋ฏ๋ก 2
(3, 6) : ACAYK์ CA๋ฅผ ๋น๊ตํ๋ค. ์ด์ ์ ์ด๋ฏธ CA๊ฐ ์ค๋ณต๋์ด 2์ด ๋์์ผ๋ฏ๋ก 2
(3, 7) : ACAYKP์ CA๋ฅผ ๋น๊ตํ๋ค. ์ด์ ์ ์ด๋ฏธ CA๊ฐ ์ค๋ณต๋์ด 2์ด ๋์์ผ๋ฏ๋ก 2
์ ๊ณผ์ ์ ๋ณด๋ฉด ๋ ธ๋ ํ์ด๋ผ์ดํธ ๋ถ๋ถ์ ๋ ์ํ๋ฒณ์ด ๊ฐ์ ๋(= ๋งจ ์์ ์ํ๋ฒณ๊ณผ ๋งจ ์ผ์ชฝ์ ์ํ๋ฒณ์ด ๊ฐ์ ๋)
(x-1, y-1) + 1์ด ๋๋ ๊ฒ์ ์ ์ ์๋ค. ์ด์งธ์ (x-1, y-1)์ 1์ ๋ํ๋๊ฐ?
3์๋ฆฌ์์ S1๊ณผ 4์๋ฆฌ์์ S2์ ๊ฐ๊ฐ ๊ฐ์ ์ํ๋ฒณ์ด ์ถ๊ฐ๋์๋ค๋ฉด
4์๋ฆฌ์์ S1๊ณผ 5์๋ฆฌ์์ S2๊ฐ ๋์ด 3์๋ฆฌ์์ S1๊ณผ 4์๋ฆฌ์์ S2์ผ๋์ LCS์ 1์ด ์ถ๊ฐ๋๊ธฐ ๋๋ฌธ์ด๋ค
์๊ฐ์ ๋ฐฉ๋ฒ์ ๋ฐ๋ณตํ์ฌ ํ๋ฅผ ๊ฐ๋ ์ฑ์ฐ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค
์ ๊ทธ๋ฐ๋ฐ ์ ํ์ (5, 7)์ ๋ณด๋ฉด ์ํ๋ฒณ์ด ๊ฐ์ง๋ ์์๋ฐ 3์ด ๋์๋ค.
CAPC์ ACAYKP์ LCS๋ฅผ ๊ตฌํ๋๋ฐ ์ด๋ผ CAP 3์๋ฆฌ๋ค.
CAP์ ACAYKP์ LCS ๋ํ CAP 3์๋ฆฌ๋ค. CAP์ C๋ฅผ ์ถ๊ฐํด๋ ๋ณํ์ง ์๋๋ค.
(x, y)๋ฅผ ๊ตฌํ ๋ (x-1, y) ์ (x, y-1)์ ๋น๊ตํ์ฌ ๋ ํฐ๊ฒ์ ๊ฐ์ ธ์ค๋ฉด ๋ ๋ฏ ํ๋ค.
์ด๋ก์จ ์ฐ๋ฆฌ๋ (x, y) ๋ฅผ ๊ตฌํ ๋
1. x = y ๋ผ๋ฉด (x-1, y-1) + 1
2. x != y ๋ผ๋ฉด max( (x-1, y), (x, y-1))
๋ผ๋ ๊ฒ์ ์์๋๋ค!
# 9251.py
s1 = str(input())
s2 = str(input())
s1s2 = [[0] * (len(s2) + 1) for _ in range(len(s1) + 1)]
for i in range(1, len(s1)+1):
for j in range(1, len(s2)+1):
if s1[i-1] == s2[j-1]:
s1s2[i][j] = s1s2[i-1][j-1] + 1
else:
s1s2[i][j] = max(s1s2[i-1][j], s1s2[i][j-1])
print(s1s2[i][j])