본문 바로가기
코딩 테스트/다이나믹 프로그래밍

편집 거리

by hazel_ 2021. 2. 22.

p. 382

 

str1=input()
str2=input()

n=len(str1)
m=len(str2)

d=[[0]*(m+1) for _ in range(n+1)]

for i in range(1,n+1):
  d[i][0]=i
for i in range(1,m+1):
  d[0][i]=i

for i in range(1, n+1):
  for j in range(1, m+1):
    # 문자가 같다면, 왼쪽 위의 수를 그대로 대입
    if str1[i-1]==str2[j-1]:
      d[i][j]=d[i-1][j-1]
    # 문자가 다르다면, 3가지 경우 중에서 최솟값 찾기
    else:
      d[i][j]=1+min(d[i][j-1], d[i-1][j], d[i-1][j-1])

print(d[n][m])

삽입 : 왼쪽 + 1

삭제 : 위쪽 + 1

교체 : 왼쪽 위 + 1

'코딩 테스트 > 다이나믹 프로그래밍' 카테고리의 다른 글

못생긴 수  (0) 2021.02.22
병사 배치하기  (0) 2021.02.22
퇴사  (0) 2021.02.22
정수 삼각형  (0) 2021.02.22
금광  (0) 2021.02.22

댓글