ํธ์ง ๊ฑฐ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ
1. ๊ฐ๋
ํธ์ง ๊ฑฐ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ(Edit Distance Algorithm)์ ๋ ๊ฐ์ ๋ฌธ์์ด A, B๊ฐ ์ฃผ์ด์ก์ ๋, ๋ ๋ฌธ์์ด์ด ์ผ๋ง๋ ์ ์ฌํ ์ง๋ฅผ ์์๋ผ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์ฆ, ๋ฌธ์์ด A๊ฐ ๋ฌธ์์ด B์ ๊ฐ์์ง๊ธฐ ์ํด์๋ ๋ช ๋ฒ์ ์ฐ์ฐ์ ์งํํด์ผ ํ๋์ง ์ ์ ์๋ค. ์ฌ๊ธฐ์์ ์ฐ์ฐ์ด๋ ์ฝ์ (Insertion), ์ฝ์ (Deletion), ๋์ฒด(Replacement)๋ฅผ ๋งํ๋ค.
๋ฌธ์์ด ๊ฐ์ ์ ์ฌ๋ ์ธก์ ์ฒ๋ผ ๊ธฐ๋ณธ์ ์ผ๋ก๋ ๋ ๋ฐ์ดํฐ ์ฌ์ด์ ์ ์ฌ๋๋ฅผ ์์๋ด๊ธฐ ์ํด ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ํนํ ํ๋ก๊ทธ๋จ์ ํ์ ์ฌ๋ถ, ์ฒ ์ ์ค๋ฅ ๊ฒ์ฌ ๋ฑ์ ์ฌ์ฉํ ์ ์๋ค.
2. ๊ธฐ๋ณธ ์๋ฆฌ
3. ๋ฌธ์
https://leetcode.com/problems/edit-distance/description/
#include <string>
#include <algorithm>
using namespace std;
class Solution {
public:
int dp[502][502]{};
int minDistance(string word1, string word2) {
for (int i = 0; i < word1.size(); i++)
dp[i + 1][0] = i + 1;
for (int j = 0; j < word2.size(); j++)
dp[0][j + 1] = j + 1;
for (int i = 1; i <= word1.size(); i++)
{
for (int j = 1; j <= word2.size(); j++)
{
if (word1[i - 1] == word2[j - 1])
dp[i][j] = dp[i - 1][j - 1];
else
dp[i][j] = min(min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;
}
}
return dp[word1.size()][word2.size()];
}
};
์ฐธ๊ณ
https://madplay.github.io/post/levenshtein-distance-edit-distance
https://velog.io/@rivolt0421/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-Edit-distance