๐Ÿ“‚์ฝ”๋”ฉํ…Œ์ŠคํŠธ:CodingTest

[swea 3304-ํŒŒ์ด์ฌ]์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด

mc.thd 2023. 6. 21. 14:28

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)) ์ด๋‹ค.

 

๋”ฐ๋ผ์„œ ์ ํ™”์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

image

์œ„ ์ ํ™”์‹์„ ๋ฐ”ํƒ•์œผ๋กœ 2์ฐจ์› ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ ๋’ค ํ–‰๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ’์„ ๊ณ„์‚ฐํ•ด ๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค.

image

์ฝ”๋“œ


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]))

ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ•˜์˜€๋‹ค.