swea 3304 ์ต์ฅ ๊ณตํต ๋ถ๋ถ ์์ด
์ฌ์ฉ์ธ์ด : PYTHON
ํ์ด
์ฐ์ ์ต์ ํด(์ต๋๊ฐ)์ ๊ตฌํ๋ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉํ์ฌ ํ ์ ์๋ค.
์ํ์(์ ํ์)์ ์ธ์ธ๋๋ "์ต์ ํด์ ์ผ๋ถ๋ถ์ด ๊ทธ ๋ถ๋ถ์ ์ต์ ํด" ๋ฅผ ์๊ฐํด์ผ ํ๋ค.
์ด ๋ฌธ์ ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ ๋ฌธ์์ด์ ๋ง์ง๋ง ๋ฌธ์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ์ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ์ฌ ์ํ์์ ์ธ์์ผ ํ๋ค.
(DP(i,j)์์ i์ j๋ ๋ฌธ์์ด X์ Y์ 1...i, 1...j ๋ฒ์งธ๊น์ง์ ๋ฌธ์์ด)
(1) ๋ ๋ฌธ์์ด์ ๋ง์ง๋ง ๋ฌธ์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ
์๋ฅผ๋ค์ด CDABE์ CDE๋ผ๊ณ ๊ฐ์ ํด๋ณด๋ฉด ๋ง์ง๋ง ๋ฌธ์ E๊ฐ ๊ฐ๋ค.
E๋ ์ต์ฅ ๊ณตํต ๋ถ๋ถ์์ด์ ๋ฐ๋์ ํฌํจ๋๋ค.
๋ฐ๋ผ์ ์ต์ฅ ๊ณตํต ๋ถ๋ถ์์ด์ ๊ธธ์ด๋ ๋ ๋ฌธ์์ด์ ๋ง์ง๋ง ๋ฌธ์ E๋ฅผ ์ ๊ฑฐํ ํ ์ฐพ์ ์ต์ฅ ๊ณตํต ๋ถ๋ถ์์ด์ ๊ธธ์ด + 1์ด ๋๋ค.
์์ผ๋ก ๋ํ๋ด๋ฉด DP(i,j)=DP(i-1,j-1)+1์ด ๋๋ค.
(2) ๋ ๋ฌธ์์ด์ ๋ง์ง๋ง ๋ฌธ์๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ
CDAB...E์ CDEG...T์ ๊ฒฝ์ฐ
E์ T๊ฐ ๋ค๋ฅด๋ฏ๋ก ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณผ ์ ์๋ค.
์ต์ฅ ๊ณตํต ๋ถ๋ถ์์ด์ด E๋ก ๋๋๋ ๊ฒฝ์ฐ : T๋ ์ต์ฅ ๊ณตํต ๋ถ๋ถ์์ด์ด ๋ ์ ์์ผ๋ฏ๋ก DP(i,j)=DP(i,j-1)์ด๋ค.
์ต์ฅ ๊ณตํต ๋ถ๋ถ์์ด์ด T๋ก ๋๋๋ ๊ฒฝ์ฐ : E๋ ์ต์ฅ ๊ณตํต ๋ถ๋ถ์์ด์ด ๋ ์ ์์ผ๋ฏ๋ก DP(i,j)=DP(i-1,j)์ด๋ค.
๋ ์ค ๋ ํฐ DP๊ฐ DP(i,j)๊ฐ ๋๋ค.
์ฆ DP(i,j)=max(DP(i,j-1),DP(i-1,j)) ์ด๋ค.
๋ฐ๋ผ์ ์ ํ์์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์๋ค.
์ ์ ํ์์ ๋ฐํ์ผ๋ก 2์ฐจ์ ๋ฐฐ์ด์ ์์ฑํ ๋ค ํ๋ฐฉํฅ์ผ๋ก ๊ฐ์ ๊ณ์ฐํด ๋๊ฐ๋ฉด ๋๋ค.
์ฝ๋
def dp():
for p in range(1,len(answer)):
for q in range(1,len(answer[0])):
if st[0][p-1]==st[1][q-1]:
answer[p][q]=answer[p-1][q-1]+1
else:
answer[p][q]=max(answer[p-1][q],answer[p][q-1])
return
T=int(input())
for i in range(T):
st=list(input().split())
answer=[[0]*(len(st[1])+1) for _ in range(len(st[0])+1)]
dp()
print('#{} {}'.format((i+1),answer[-1][-1]))
ํ์ด๋ฅผ ์ฐธ๊ณ ํ์๋ค.
'๐์ฝ๋ฉํ ์คํธ:CodingTest' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
bfs ๋ฐฉ๋ฌธ์ฒดํฌ ์์น (2) | 2023.11.22 |
---|---|
[swea 1868-ํ์ด์ฌ] ํํํํ ์ง๋ขฐ์ฐพ๊ธฐ (0) | 2023.06.22 |
[swea 3307-ํ์ด์ฌ]์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด (0) | 2023.06.21 |
[swea 4615-ํ์ด์ฌ]์ฌ๋ฏธ์๋ ์ค์ ๋ก ๊ฒ์ (0) | 2023.06.21 |
[swea 1216-ํ์ด์ฌ]ํ๋ฌธ2 (0) | 2023.06.21 |