๐Ÿ“–Problem

9251๋ฒˆ: LCS

๐Ÿ”Intuition: LCS ๊ฐœ๋…

์•„๋ž˜๋Š” ๊ต‰์žฅํžˆ ์ž˜ ์ •๋ฆฌํ•ด์ฃผ์‹  ๋ธ”๋กœ๊ฑฐ๋ถ„์˜ ๊ฐœ๋…์ •๋ฆฌ ๊ฒŒ์‹œ๊ธ€์ด๋‹ค.

LCS์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ์•Œ์•„์•ผ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ œํ•œ์‹œ๊ฐ„ 1์‹œ๊ฐ„ ๋‚ด์— ๊ฐœ๋…์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋จผ์ € ํ•˜๊ณ  ์‹œ์ž‘ํ–ˆ๋‹ค.

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ทธ๋ฆผ์œผ๋กœ ์•Œ์•„๋ณด๋Š” LCS ์•Œ๊ณ ๋ฆฌ์ฆ˜ - Longest Common Substring์™€ Longest Common Subsequence

(ํ‘œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์—ˆ์ง€๋งŒ ๋‚˜๋„ ์‹œํ—˜๊ธฐ๊ฐ„์ธ์ง€๋ผ ์ดํ•ด๋งŒ ํ•˜๊ณ  ๋„˜์–ด๊ฐ)

1000027411.jpg

<aside> ๐Ÿ” ๋ฌธ์ œ ํ’€์ด์— ํ•„์š”ํ•œ ๋‚ด์šฉ : Longest Common Subsequence ๊ธธ์ด ๊ตฌํ•˜๊ธฐ

</aside>

์ ํ™”์‹

if i == 0 or j == 0:  # ๋งˆ์ง„ ์„ค์ •
	LCS[i][j] = 0
elif string_A[i] == string_B[j]:
	LCS[i][j] = LCS[i - 1][j - 1] + 1
else:
	LCS[i][j] = max(LCS[i - 1][j], LCS[i][j - 1])

์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„์ˆ˜์—ด์˜ ์ ํ™”์‹์„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์œ„์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ LCS๋ผ๋Š” 2์ฐจ์› ๋ฐฐ์—ด์— ๋งค์นญํ•˜๊ณ  ๋งˆ์ง„๊ฐ’์„ ์„ค์ •ํ•œ ํ›„ ๊ฒ€์‚ฌํ•œ๋‹ค.

  1. ๋ฌธ์ž์—ดA, ๋ฌธ์ž์—ดB์˜ย ํ•œ๊ธ€์ž์”ฉย ๋น„๊ตํ•œ๋‹ค.
  2. ๋‘ ๋ฌธ์ž๊ฐ€ย ๋‹ค๋ฅด๋‹ค๋ฉด, ์™ผ์ชฝ ๊ฐ’์ด๋‚˜ ์œ„์ชฝ ๊ฐ’, ์ฆ‰ย LCS[i - 1][j]์™€ย LCS[i][j - 1]ย ์ค‘์— ํฐ๊ฐ’์„ ํ‘œ์‹œํ•œ๋‹ค.
  3. ๋‘ ๋ฌธ์ž๊ฐ€ย ๊ฐ™๋‹ค๋ฉด ์ด์ „ ๊ฐ’์— +1ํ•˜๊ธฐ ์œ„ํ•ดย LCS[i - 1][j - 1]ย ๊ฐ’์„ ์ฐพ์•„ย +1ย ํ•œ๋‹ค.
  4. ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

๐Ÿ”Approach

๐Ÿšฉ๋‚˜์˜ ์ œ์ถœ ๊ณผ์ • ์ฝ”๋“œ ๊ธฐ๋ก