December 09, 2025
๋ฐฐ์ด์ด ๋ ๊ฐ ์ฃผ์ด์ง ๋, ๋ ๋ฐฐ์ด์์ ๊ณตํต์ผ๋ก ๋ํ๋๋ ๊ฐ์ฅ ๊ธด ์ฐ์ ๋ถ๋ถ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ฒ์ ํ์ด๋ณผ๋๋ ๋ค์๊ณผ ๊ฐ์ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ํ์ด๋ดค์ต๋๋ค.
class Solution:
def findLength(self, nums1: List[int], nums2: List[int]) -> int:
idx1 = 0
max_len = 0
while idx1 < len(nums1): # for each subarr1
for i2 in range(len(nums2)): # find matching starts subarr2
n = 0
# find how long that match goes
while i2+n < len(nums2) and idx1+n < len(nums1) and nums2[i2+n] == nums1[idx1+n]:
max_len = max(max_len, n+1)
print(nums1[idx1:idx1+n+1], "matches", nums2[i2:i2+n+1])
n += 1
idx1 += 1
return max_len
๊ทธ๋ฌ๋ ์ด๋ ๊ฒ ํ ๊ฒฝ์ฐ while/for ๋ฌธ์ด 3์ข
์ผ๋ก ์ค์ฒฉ๋์ด ๋จ๋ฒ์ ์๊ฐ ๋ณต์ก๋๊ฐ O(n^3)์ผ๋ก ๋นํจ์จ์ ์ด๊ฒ ๋ฉ๋๋ค.
ํ
์คํธ๋ ํ๋ฆด์ง์ธ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ ๊ฒ์ด ์์๋๋ฉฐ ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์์ ๊ฒ์ด๋ผ ์๊ฐํ์ต๋๋ค.
์ญ์ ์ด ๋ฌธ์ ๋ DP๋ก ์ ๊ทผํ ์ ์์์ต๋๋ค. DP ํ ์ด๋ธ์ ๋ง๋ค์ด์ ๊ฐ ์ธ๋ฑ์ค๋ง๋ค์ ์ต๋ ๊ธธ์ด๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค. Longest Common Substring ๋ฌธ์ ์ ๋์ผํ ์ ๊ทผ๋ฒ์ ๋๋ค.
class Solution:
def findLength(self, nums1: List[int], nums2: List[int]) -> int:
n,m = len(nums1), len(nums2)
dp = [[0] * (m+1) for _ in range(n+1)]
max_val = 0
for i in range(1,n+1):
for j in range(1,m+1):
if nums1[i-1] == nums2[j-1]:
dp[i][j] = dp[i-1][j-1] + 1
max_val = max(max_val, dp[i][j])
return max_val
Constraints:
1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 100