알고리즘 :: 백준 :: DP :: 15483 :: 최소 편집

Embedded June·2021년 2월 12일
0

알고리즘::백준

목록 보기
71/109

문제


문제 링크

두 문자열 A와 B가 주어졌을 때, A에 연산을 최소 횟수로 수행해 B로 만드는 문제를 "최소 편집" 문제라고 한다.

A에 적용할 수 있는 연산은 총 3가지가 있으며 아래와 같다.

  1. 삽입: A의 한 위치에 문자 하나를 삽입한다.
  2. 삭제: A의 문자 하나를 삭제한다.
  3. 교체: A의 문자 하나를 다른 문자로 교체한다.

두 문자열이 주어졌을 때, 최소 편집 횟수를 구하는 프로그램을 작성하시오.

문제접근

코드

#include <iostream>
using namespace std;

int main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	string lhs, rhs;
	cin >> lhs >> rhs;
	
	int lStrLen = lhs.length(), rStrLen = rhs.length();
	int dp[lStrLen + 1][rStrLen + 1];
	for (int i = 0; i <= rStrLen; ++i) dp[0][i] = i;
	for (int i = 0; i <= lStrLen; ++i) dp[i][0] = i;
	for (int y = 1; y <= lStrLen; ++y) {
		for (int x = 1; x <= rStrLen; ++x) {
			if (lhs[y - 1] == rhs[x - 1]) dp[y][x] = dp[y - 1][x - 1];
			else dp[y][x] = min(dp[y - 1][x], min(dp[y - 1][x - 1], dp[y][x - 1])) + 1;			 
		}
	}
	cout << dp[lStrLen][rStrLen] << '\n';
}

결과

profile
임베디드 시스템 공학자를 지망하는 컴퓨터공학+전자공학 복수전공 학부생입니다. 타인의 피드백을 수용하고 숙고하고 대응하며 자극과 반응 사이의 간격을 늘리며 스스로 반응을 컨트롤 할 수 있는 주도적인 사람이 되는 것이 저의 20대의 목표입니다.

0개의 댓글