LCS

LCS(Longest Common Subsequence)๋ž€ ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์ด๋‹ค.

์—ฌ๊ธฐ์„œ Subsequence๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์œผ๋กœ ๋ฌธ์ž์—ด์ด ์—ฐ์†์ ์ผ ํ•„์š”๋Š” ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰, ๋‘ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•  ๋•Œ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด ์ค‘ ๊ธธ์ด๊ฐ€ ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ์˜๋ฏธํ•œ๋‹ค.

์˜ˆ์‹œ๋กœ "ACAYKP", "CAPCAK"๋ฅผ ๋ณด๋ฉด ๋‘ ๋ฌธ์ž์˜ LCS๋Š” ACAK๋‹ค.

์ด ๋‹ต์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ์„๊นŒ?

ํ•ด๊ฒฐ์€ DP๋ฅผ ์ด์šฉํ•ด ํ•ด๊ฒฐํ•œ๋‹ค. ๋จผ์ € DP๋ฅผ ์ด์šฉํ•œ ํ…Œ์ด๋ธ”์„ ๋จผ์ € ๋ด๋ณด์ž.

DP
C
A
P
C
A
K

0

0

0

0

0

0

0

A

0

0

1

1

1

1

1

C

0

1

1

1

2

2

2

A

0

1

2

2

2

3

3

Y

0

1

2

2

2

3

3

K

0

1

2

2

2

3

4

P

0

1

2

3

3

3

4

์—ฌ๊ธฐ์„œ DP[3][5]๋Š” ACAYKP์˜ 3๋ฒˆ์งธ ๋ฌธ์ž A, CAPCAK์˜ 5๋ฒˆ์งธ ๋ฌธ์ž A๊นŒ์ง€ ๋น„๊ตํ•œ๋‹ค. DP[3]์„ ์˜ˆ์‹œ๋กœ ๋“ค์–ด๋ณด์ž.

DP[3][0]๋ถ€ํ„ฐ DP[3][6]๊นŒ์ง€ ๊ฐ€๋ฉด์„œ ๋น„๊ต๋ฅผ ํ•˜๊ฒŒ๋œ๋‹ค. ๋งŒ์•ฝ ๋น„๊ตํ•˜๊ฒŒ ๋˜๋Š” ๋ฌธ์ž๊ฐ€ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด, ๊ฐ ๋ฌธ์ž๋ฅผ ๊ณ ๋ คํ•˜๊ธฐ ์ „์˜ ์ตœ๋Œ“๊ฐ’์œผ๋กœ ๋ฐ˜์˜ํ•œ๋‹ค.

DP[i][j] = max(DP[i-1][j], DP[i][j-1]

์™œ๋ƒํ•˜๋ฉด ๋ฌธ์ž๊ฐ€ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด, ํ˜„์žฌ ์žˆ๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฐ ๋ฌธ์ž๋ผ๋Š” ๊ฒƒ์€ ๋‘ ๋ฌธ์ž์—ด์˜ ๋น„๊ต๋˜๋Š” ๋ฌธ์ž์ด๋‹ค. DP[3][5]๋ผ๋ฉด ACAYKP์˜ A์™€ CAPCAK์˜ A๋ฅผ ๋งํ•œ๋‹ค.

DP[3][5]์ฒ˜๋Ÿผ ๋น„๊ต๋˜๋Š” ๋ฌธ์ž๊ฐ€ ๊ฐ™๋‹ค๋ฉด, DP[i][j] = DP[i-1][j-1] + 1 ์ด๋‹ค. ๋‘ ๋ฌธ์ž๊ฐ€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋ฌธ์ž๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์ „ ์ตœ๋Œ“๊ฐ’์— +1์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

Last updated