2차원 배열 리스트를 이용해서 문자열이 같을 때와, 다를때로 나누어서 진행하면 된다.
점화식
1. 두 문자가 같은 경우: dp[i][j]=dp[i-1][j-1]
2. 두 문자가 다른 경우: 1+min(dp[i][j-1],dp[i-1][j],dp[i-1][j-1])
dp[i][j-1]: 삽입
dp[i-1][j]: 삭제
dp[i-1][j-1]: 교체
def edit_dist(str1,str2):
n=len(str1)
m=len(str2)
dp=[[0]*(m+1) for _ in range(n+1)]
for i in range(1,n+1):
dp[i][0]=i
for i in range(1,m+1):
dp[0][i]=i
for i in range(1,n+1):
for j in range(1,m+1):
if str1[i-1]==str2[j-1]:
dp[i][j]=dp[i-1][j-1]
else:
dp[i][j]=1+min(dp[i][j-1],dp[i-1][j],dp[i-1][j-1])
return dp[n][m]
str1=input()
str2=input()
print(edit_dist(str1,str2))
'코딩테스트 > 기출' 카테고리의 다른 글
[스택,큐/프로그래머스] 12906번 : 같은 숫자는 싫어 (0) | 2022.08.17 |
---|---|
[Greedy/프로그래머스] 72410번 : 신규 아이디 추천 (0) | 2022.08.16 |
[dp/구글 인터뷰] 못생긴 수(다시) (0) | 2022.05.27 |
[dp기출] 금광 (0) | 2022.05.25 |
[프로그래머스/이진탐색] 가사 검색 (0) | 2022.05.25 |