[알고리즘] 조건부 LCS
2023. 11. 6. 01:30ㆍ알고리즘 풀이
LCS 문제 중에서 X, Y를 비교하는데 X의 원소를 최대 k개 바꿀 수 있는 문제의 경우 다음과 같이 풀 수 있다.
def lcs(dp, arr1, n, arr2, m, k):
for x in range(1, k+2):
for i in range(1, len(arr1)+1):
for j in range(1, len(arr2)+1):
if arr1[i-1] == arr2[j-1]:
dp[x][i][j] = max(dp[x][i][j-1], dp[x][i-1][j], dp[x][i-1][j-1] + 1)
else:
dp[x][i][j] = max(dp[x][i][j-1], dp[x][i-1][j], dp[x-1][i-1][j-1] + 1)
return dp[-1][-1][-1]
# Driven Program
if __name__ == "__main__":
k = 1
arr1 = "AAB"
arr2 = "CAB"
n = len(arr1)
m = len(arr2)
dp = [[[0 for j in range(m+1)] for i in range(n+1)] for _ in range(k+2)]
print(lcs(dp, arr1, n, arr2, m, k))
이 로직이 핵심이다
If P[i] != Q[j],
dp[i][j][k] = max(dp[i - 1][j][k],
dp[i][j - 1][k],
dp[i - 1][j - 1][k - 1] + 1)
If P[i] == Q[j],
dp[i][j][k] = max(dp[i - 1][j][k],
dp[i][j - 1][k],
dp[i - 1][j - 1][k] + 1)
Reference
https://www.geeksforgeeks.org/longest-common-subsequence-with-at-most-k-changes-allowed/
Longest Common Subsequence with at most k changes allowed - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
'알고리즘 풀이' 카테고리의 다른 글
[알고리즘][X] 정수 제곱근 판별 (0) | 2023.11.09 |
---|---|
[알고리즘] 자릿수 더하기 (0) | 2023.11.07 |
[알고리즘] 자연수 뒤집어 배열로 만들기 (0) | 2023.11.06 |
[알고리즘] x만큼 간격이 있는 n개의 숫자 (1) | 2023.11.03 |
[알고리즘] 문자열 내 p와 y의 개수 (0) | 2023.11.03 |