ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90

๋ฌธ์ œ

LCS(Longest Common Subsequence, ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด)๋ฌธ์ œ๋Š” ๋‘ ์ˆ˜์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ชจ๋‘์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด์ด ๋˜๋Š” ์ˆ˜์—ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ฒƒ์„ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ACAYKP์™€ CAPCAK์˜ LCS๋Š” ACAK๊ฐ€ ๋œ๋‹ค.

๋”๋ณด๊ธฐ

์ž…๋ ฅ

์ฒซ์งธ ์ค„๊ณผ ๋‘˜์งธ ์ค„์— ๋‘ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ๋ฌธ์ž์—ด์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์ตœ๋Œ€ 1000๊ธ€์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๋‘ ๋ฌธ์ž์—ด์˜ LCS์˜ ๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ 1 ๋ณต์‚ฌ

ACAYKP
CAPCAK

์˜ˆ์ œ ์ถœ๋ ฅ 1 ๋ณต์‚ฌ

4

๋ฌธ์ œ ์œ ํ˜•

DP


๋ฌธ์ œ ํ’€์ด

 

๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ

ํ•œ ๋ฌธ์ž์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์žก๊ณ , ํ•œ ๊ธ€์ž์”ฉ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ์ง€๊ธˆ๊นŒ์ง€์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ 'LCS(์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด)'์ด ๋ช‡ ๊ฐœ์ธ์ง€ ๊ธฐ๋กํ•ด๋‚˜๊ฐ„๋‹ค.

 

์ฃผ์–ด์ง„ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์—ด์˜ sub suquence๋ฅผ S1, ๋‘ ๋ฒˆ์งธ ๋ฌธ์ž์—ด์˜ sub sequence๋ฅผ S2๋ผ๊ณ  ํ–ˆ์„ ๋•Œ,

S1๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์žก๊ณ , S2์— ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ๋น„๊ตํ•œ๋‹ค.

 

ํ•˜๋‚˜ ํ•˜๋‚˜ ํ•ด๋ณด๊ธฐ

๋‹จ์ˆœํ•˜๊ฒŒ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ๋ฌธ์ž๋ฅผ ๋น„๊ตํ•˜๋ฉด์„œ ๊ฐ™์€ ๊ธ€์ž๊ฐ€ ๋‚˜์˜ค๋ฉด ์šฐ์„  LCS์— +1์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋งž๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, 

S1: A

S2: CA

 

S1: A

S2: CAPCA

์™€ ๊ฐ™์€ ์ƒํ™ฉ์„ ๋ดค์„ ๋•Œ, ๋ฌธ์ž๊ฐ€ ๊ฐ™๋‹ค๊ณ  ๋ฌด์กฐ๊ฑด +1์„ ํ•ด์ฃผ๋Š” ๋‹จ์ˆœํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” 

+1์„ ํ•ด์•ผํ•˜๋Š”๋ฐ ์ค‘๋ณต์œผ๋กœ +2๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์กฐ๊ธˆ ๋” ์ƒ๊ฐ์„ ํ•ด๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

ํ•œ ๋ฐ”ํ€ด๋ฅผ ์ง์ ‘ ๋” ์ง„ํ–‰ํ•ด๋ณด์ž.

S1: AC

S2: C

 

S1: AC

S2: CAPC

๋‘ ์ƒํ™ฉ์—์„œ S1์˜ C์™€ S2์˜ C๊ฐ€ ๊ฐ™๋‹ค.

์ด ์ƒํ™ฉ์—์„œ ์–ด๋–ป๊ฒŒ LCS์— +1์„ ํ•ด์ค˜์•ผํ• ๊นŒ?

 

'๋น„๊ตํ•˜๋Š” ๊ธ€์ž๊ฐ€ ์žˆ๊ธฐ ๋ฐ”๋กœ ์ „๊นŒ์ง€์˜ LCS'  + ( if ํ˜„์žฌ ๋ฌธ์ž๋ฅผ ๋น„๊ตํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์œผ๋ฉด  1, ๋‹ค๋ฅด๋ฉด 0)

 

์„ ํ•ด์ฃผ๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

S1: AC

S2: CAPC

์˜ ๋ฐ”๋กœ ์ด์ „๊นŒ์ง€์˜ LCS๋Š”

ํ˜„์žฌ ๋น„๊ตํ•˜๊ณ  ์žˆ๋Š” C๊ฐ€ ์žˆ๊ธฐ ์ „์ธ

 

S1: A

S2: CAP

๊นŒ์ง€์˜ LCS์ด๋‹ค.

 

๋”ฐ๋ผ์„œ, ํ˜„์žฌ ๋ฌธ์ž๋ฅผ ๋น„๊ตํ–ˆ์„ ๋•Œ ๊ฐ™๋‹ค๋ฉด ๋ฐ”๋กœ ์ด์ „๊นŒ์ง€์˜ LCS์— +1 ์„ ํ•ด์ฃผ๊ณ ,

๊ฐ™์ง€ ์•Š๋‹ค๋ฉด, ๋น„๊ต ์ด์ „๊นŒ์ง€์˜ LCS๋ฅผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉด ๋œ๋‹ค.

 

๋”๋ณด๊ธฐ

์ฆ‰, ํ˜„์žฌ ์œ„์น˜ ๊ธฐ์ค€ LCS๋Š” ์ด์ „ LCS์—  + 1์„ ๋”ํ•˜๊ฑฐ๋‚˜,  ๋”ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜  ๋‘ ๊ฐ€์ง€ ์ค‘ ํ•œ ๊ฐ€์ง€๊ฐ€ ๋œ๋‹ค.

์œ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ ํ™”์‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ,
๊ฐ ๋ถ€๋ถ„์—์„œ ์ด์ „์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ํ•ด๋‹น ์ตœ์  ๊ฒฐ๊ณผ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ๋˜๋‹ˆ 
DP์˜ ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์ธ Overlapping Subproblems์™€ Optimal Substructure๋ฅผ ๋งŒ์กฑํ•œ๋‹ค.

 

์ด ๋ฌธ์ œ์—์„œ๋Š” ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ๋น„๊ตํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ,

๋‘ ๋ฌธ์ž์—ด๋กœ 2์ฐจ์› ํ–‰๋ ฌ์„ ๋งŒ๋“ค์–ด ํ‘œ๋กœ ๋ณด๋Š” ๊ฒƒ์ด ๊ทœ์น™์„ ์ฐพ๊ณ  ์ ํ™”์‹์„ ๋งŒ๋“ค๋•Œ ๋”์šฑ ํŽธํ•˜๋‹ค.

 

2์ฐจ์› ํ–‰๋ ฌ๋กœ lcs[i][j] ๋ผ๊ณ  ํ‘œํ˜„ํ•  ๋•Œ, ๋ฐ”๋กœ ์ด์ „๊นŒ์ง€์˜ LCS๋Š” lcs[i-1][j-1] ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋น„๊ตํ•œ ๋ฌธ์ž๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ, 

 

 lcs[i][j] = lcs[i-1][j-1] + 1 

 

์ด๋ผ๊ณ  ์ ํ™”์‹์„ ์„ธ์šธ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด, ๋‚˜๋จธ์ง€ ๊ฒฝ์šฐ์ธ ๋น„๊ตํ•œ ๋ฌธ์ž๊ฐ€ ๊ฐ™์ง€ ์•Š์€ ๊ฒฝ์šฐ๋Š” ์–ด๋–ป๊ฒŒ ์ ํ™”์‹์„ ์„ธ์šธ ์ˆ˜ ์žˆ์„๊นŒ?

 

S1: AC

S2: CAPCA

๋ฅผ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž,

 

C์™€ A๋Š” ๋น„๊ตํ–ˆ์„ ๋•Œ ๋ฌธ์ž๊ฐ€ ๊ฐ™์ง€ ์•Š์œผ๋ฏ€๋กœ,

๊ฐ๊ฐ ๋‘ ๋ฌธ์ž๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์ „์ธ

 

S1: AC

S2: CAPC

์ผ ๋•Œ์˜ LCS๋‚˜

 

S1: A

S2: CAPCA

์ผ ๋•Œ์˜ LCS ์ค‘์—์„œ

 

์ฆ‰, ๊ธฐ์กด์— ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋˜ LCS ์ค‘ ์ตœ๋Œ€ LCS๋ฅผ ๊ฐ€์ง€๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

๋”ฐ๋ผ์„œ ๋น„๊ตํ•œ ๋ฌธ์ž๊ฐ€ ๊ฐ™์ง€ ์•Š์€ ๊ฒฝ์šฐ๋Š” ์ ํ™”์‹์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

lcs[i][j] = max( lcs[i-1][j], lcs[i][j-1] )

 

 

์ •๋ฆฌํ•ด ๋ณด๋ฉด, ์ ํ™”์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

โœ… ๋น„๊ตํ•œ ๋ฌธ์ž๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ,
lcs[i][j] = lcs[i-1][j-1] + 1 

โœ… ๋น„๊ตํ•œ ๋ฌธ์ž๊ฐ€ ๊ฐ™์ง€ ์•Š์€ ๊ฒฝ์šฐ,
lcs[i][j] = max( lcs[i-1][j], lcs[i][j-1] )


DP ๋‹จ๊ณ„๋ณ„๋กœ ํ’€์–ด๋‚˜๊ฐ€๊ธฐ

 

1๏ธโƒฃ DP๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ

๐Ÿ”ฝ

2๏ธโƒฃ ๋ฌธ์ œ์˜ ๋ณ€์ˆ˜ ํŒŒ์•…ํ•˜๊ธฐ

์ •์˜

: lcs[i][j] = ๋ฌธ์ž ์œ„์น˜ [i][j]์—์„œ์˜ LCS

๐Ÿ”ฝ

3๏ธโƒฃ ์ ํ™”์‹ ๋งŒ๋“ค๊ธฐ

์ ํ™”์‹

โœ… ๋น„๊ตํ•œ ๋ฌธ์ž๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ,
lcs[i][j] = lcs[i-1][j-1] + 1 

โœ… ๋น„๊ตํ•œ ๋ฌธ์ž๊ฐ€ ๊ฐ™์ง€ ์•Š์€ ๊ฒฝ์šฐ,
lcs[i][j] = max( lcs[i-1][j], lcs[i][j-1] )

๐Ÿ”ฝ

4๏ธโƒฃ ๋ฉ”๋ชจํ•˜๊ธฐ(Memoization)

lcs 2์ฐจ์› ๋ฐฐ์—ด์— ๋ฉ”๋ชจ๋˜๊ณ  ์žˆ๋‹ค.

๐Ÿ”ฝ

5๏ธโƒฃ ๊ธฐ์ € ์ƒํƒœ ํŒŒ์•…ํ•˜๊ธฐ

๊ธฐ์ € ์ƒํƒœ๋Š” ํ–‰๊ณผ ์—ด์—์„œ ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ ๋ฌธ์ž๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ฒฝ์šฐ์ผ ๊ฒƒ์ด๋‹ค.

๊ธฐ์ € ์ƒํƒœ

lcs[0][j], lcs[i][0] = 0

๊ทธ๋Ÿฐ๋ฐ ์ ํ™”์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” i-1, j-1์ด ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ,

ํ–‰๋ ฌ์—์„œ 0์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ•œ ํ–‰๊ณผ ํ•œ ์—ด์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

(์•„๋ฌด ๋ฌธ์ž๋„ ๋น„๊ตํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•˜๊ณ , ๊ณ„์‚ฐ์„ ์œ„ํ•ด ์ถ”๊ฐ€ํ•œ๋‹ค ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค.)

๐Ÿ”ฝ

6๏ธโƒฃ ๊ตฌํ˜„ํ•˜๊ธฐ

1) Bottom-Up  - ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ โœ…

 

 

 


์ฐธ๊ณ ๋กœ, 0์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ•œ ํ–‰๊ณผ ํ•œ ์—ด ๋•Œ๋ฌธ์— ํ–‰๋ ฌ์—์„œ์˜ ๋ฌธ์ž ์œ„์น˜๊ฐ€ ํ•˜๋‚˜์”ฉ ๋’ค๋กœ ๋ฐ€๋ ธ์œผ๋ฏ€๋กœ(+1), 
๋ฌธ์ž์—ด์—์„œ์˜ ๋น„๊ต๋Š” 1์„ ๋นผ์ค€ s1[i-1]๊ณผ s[j-1]์„ ๋น„๊ตํ•œ๋‹ค.

 

728x90
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
ยซ   2025/02   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
๊ธ€ ๋ณด๊ด€ํ•จ
250x250