두 개의 문자열 A와 B가 주어졌을 때, 문자열 A를 편집하여 문자열 B로 만들고자 합니다.
문자열 A를 편집할 때는 다음의 세 연산 중에서 한 번에 하나씩 선택하여 이용할 수 있습니다.
이 때 편집 거리란 문자열 A를 편집하여 문자열 B로 만들기 위해 사용한 연산의 수를 의미합니다.
문자열 A를 문자열 B로 만드는 최소 편집 거리를 계산하는 프로그램을 작성하세요.
예를 들어 "sunday"와 "saturday"의 최소 편집 거리는 3입니다.
두 문자열 A와 B가 한줄에 하나씩 주어집니다.
각 문자열은 영문 알파벳으로만 구성되어 있으며 , 각 문자열의 길이는 1보다 크거나 같고, 5,000보다 작거나 같습니다.
최소 편집 거리를 출력합니다.
import sys
input = sys.stdin.readline
a = list(input().strip())
b = list(input().strip())
n = len(a)
m = len(b)
dp = [[0] * (n + 1) for _ in range(m + 1)]
for i in range(1, n+1):
dp[0][i] = i
for j in range(1, m+1):
dp[j][0] = j
for i in range(1, m + 1):
for j in range(1, n + 1):
# 문자가 같은 경우라면 연산이 필요 없음
if a[j-1] == b[i-1]:
dp[i][j] = dp[i-1][j-1]
# 문자 연산 - 삭제 / 삽입 / 수정
else:
dp[i][j] = min(dp[i-1][j-1], dp[i][j-1], dp[i-1][j]) + 1
print(dp[m-1][n-1])
알고리즘 유형 : 다이나믹 프로그래밍
편집 거리 알고리즘(Edit Distance Algorithm)을 찾아보았고 두 문자열의 유사도를 판단하는 곳에 사용되는 알고리즘이다.
2차원 배열을 만들고 문자열을 비교하여 같은 경우와 아닌 경우에 대한 연산을 수행하도록 한다.
편집 거리 알고리즘 설명
이것이 코딩테스트다 with 파이썬 - 편집거리
모범 답안 - 편집거리