Search

LCS

νƒœκ·Έ
졜μž₯ 곡톡 λΆ€λΆ„ λ¬Έμžμ—΄
μ•Œκ³ λ¦¬μ¦˜

LCS(Longest Common Substring)

β€’
졜μž₯ 곡톡 λΆ€λΆ„ λ¬Έμžμ—΄μ΄λ‹€.
β€’
DP λ₯Ό 기반으둜 ν•œλ‹€.
β€’
Substring 은 μ—°μ†λœ λΆ€λΆ„ λ¬Έμžμ—΄μ„ ν™•μΈν•œλ‹€.

λ™μž‘κ³Όμ •

첫번째둜 ν•΄μ•Ό ν•  일은 dp ν…Œμ΄λΈ”μ„ μƒμ„±ν•˜λŠ” 것이닀. μ΄λ•Œ 첫번째 ν–‰κ³Ό 열은 항상 0 으둜 λ§žμΆ°μ€€λ‹€.
0
A
B
C
D
E
F
0
0
0
0
0
0
0
0
G
0
0
0
0
0
0
0
B
0
0
1
0
0
0
0
C
0
0
0
2
0
0
0
D
0
0
0
0
3
0
0
F
0
0
0
0
0
0
1
E
0
0
0
0
0
1
0
ν…Œμ΄λΈ”μ„ μ±„μš°λŠ” 기쀀은 μ•„λž˜μ™€ κ°™λ‹€.
μ„œλ‘œ 같은 λ¬Έμžμ—΄μ΄ 였면 λŒ€κ°μ„ (μ™Όμͺ½ μœ„)의 κ°’ + 1 을 ν•œλ‹€.
μ΄λŠ” 곡톡 λ¬Έμžμ—΄μ€ μ—°μ†λ˜μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
λ§Œλ“€μ–΄μ§„ ν…Œμ΄λΈ”μ—μ„œ μ΅œλŒ“κ°’μ„ 찾으면 LCS 탐색이 μ’…λ£Œλœλ‹€.

LCS(Longest Common Subsequence)

β€’
졜μž₯ 곡톡 λΆ€λΆ„ μˆ˜μ—΄μ΄λ‹€.
β€’
DP λ₯Ό 기반으둜 ν•œλ‹€.
β€’
Subsequence λŠ” μ—°μ†λ˜μ§€ μ•Šμ€ λΆ€λΆ„ λ¬Έμžμ—΄μ„ μ°ΎλŠ”λ‹€.

λ™μž‘κ³Όμ •

1. ν…Œμ΄λΈ” λ§Œλ“€κΈ°

첫번째둜 ν•΄μ•Ό ν•  일은 dp ν…Œμ΄λΈ”μ„ μƒμ„±ν•˜λŠ” 것이닀. μ΄λ•Œ 첫번째 ν–‰κ³Ό 열은 항상 0 으둜 λ§žμΆ°μ€€λ‹€.
0
A
B
C
D
E
F
0
0
0
0
0
0
0
0
G
0
0
0
0
0
0
0
B
0
0
1
1
1
1
1
C
0
0
1
2
2
2
2
D
0
0
1
2
3
3
3
F
0
0
1
2
3
3
4
E
0
0
1
2
3
4
4
ν…Œμ΄λΈ”μ„ μ±„μš°λŠ” 기쀀은 μ•„λž˜μ™€ κ°™λ‹€.
β€’
μ„œλ‘œ λ‹€λ₯Έ λ¬Έμžμ—΄μ΄ 였면 μœ„, μ™Όμͺ½ 값을 λΉ„κ΅ν•˜μ—¬ 더 큰 값을 λ„£λŠ”λ‹€.
β€’
μ„œλ‘œ 같은 λ¬Έμžμ—΄μ΄ 였면 λŒ€κ°μ„ (μ™Όμͺ½ μœ„)의 κ°’ + 1 을 ν•œλ‹€.
이전과 μ„œλ‘œ λ‹€λ₯Έ λ¬Έμžμ—΄ λΆ€λΆ„μ—μ„œ 차이점을 λ³΄μ΄λŠ” μ΄μœ λŠ” 곡톡 λΆ€λΆ„ μˆ˜μ—΄μ€ 연속될 ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ΄λ‹€. λ§Œλ“€μ–΄μ§„ ν…Œμ΄λΈ”μ—μ„œ μ΅œλŒ“κ°’μ„ 찾으면 LCS 탐색이 μ’…λ£Œλœλ‹€.

2. κ²°κ³Ό μ°ΎκΈ°

0
A
B
C
D
E
F
0
0
0
0
0
0
0
0
G
0
0
0
0
0
0
0
B
0
0
1
1
1
1
1
C
0
0
1
2
2
2
2
D
0
0
1
2
3
3
3
F
0
0
1
2
3
3
4
E
0
0
1
2
3
4
4
μ΄λ ‡κ²Œ λ§Œλ“€μ–΄μ§„ ν…Œμ΄λΈ”μ—μ„œ κ²°κ³Όλ₯Ό μ°ΎλŠ”κ³Όμ •μ€ λ‹€μŒκ³Ό κ°™λ‹€.
1.
LCS λ°°μ—΄μ˜ κ°€μž₯ λ§ˆμ§€λ§‰ κ°’μ—μ„œ μ‹œμž‘ν•΄μ„œ μœ„ / μ•„λž˜ 쀑 ν˜„μž¬ κ°’κ³Ό 같은 값을 μ°ΎλŠ”λ‹€.
2.
값을 μ°Ύμ•˜λ‹€λ©΄ ν•΄λ‹Ή κ°’μœΌλ‘œ μ΄λ™ν•œλ‹€. κ·Έ ν›„ μ™Όμͺ½κ³Ό μœ„μͺ½κ°’ 쀑 ν˜„μž¬μ™€ 같은 값을 μ°ΎλŠ”λ‹€.
2.1. ν˜„μž¬μ™€ 같은 값이 μ—†λ‹€λ©΄ λŒ€κ°μ„ μœΌλ‘œ μ΄λ™ν•œλ‹€. κ·Έ ν›„ λ‹€μ‹œ 2 번 과정을 λ°˜λ³΅ν•œλ‹€.
2.2. 값을 μ°Ύμ•˜λ‹€λ©΄ ν•΄λ‹Ή κ°’μœΌλ‘œ μ΄λ™ν•˜μ—¬ 2 번 과정을 λ°˜λ³΅ν•œλ‹€.
3.
0 으둜 μ΄λ™ν•˜λ©΄ μ’…λ£Œν•˜κ³ , 배열을 λ’€μ§‘λŠ”λ‹€.