[백준/BOJ] 백준 1120번 : 문자열

2020. 6. 11. 06:04알고리즘 문제풀이

https://www.acmicpc.net/problem/1120

 

1120번: 문자열

길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다. 두 문자열 A와 B가 주어진다. 이때, A의 �

www.acmicpc.net

문자열 a와 b의 길이 차이를 구하여 diff라 하고, 문자열 a의 앞과 뒤에 문자열 b의 앞에서 0개, 뒤에서 diff개 붙이는 것부터 앞에서 diff개, 뒤에서 0개 붙이는 것까지 총 diff+1번 실행해보며 그중 문자가 다른 것의 최소 개수를 구한다.

 

코드

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	string a;
	string b;
	int diff;
	int minresult = 987654321;
	int count;

	cin >> a >> b;

	//a와 b의 길이 차이를 구한다
	diff = b.size() - a.size();
	//앞에 0개 뒤에 diff개 붙여보기 부터 앞에 diff개 뒤에 0개 붙여보기까지 진행한다
	for (int i = 0; i <= diff; i++)
	{
		string temp = a; //a를 대신해 앞 뒤로 문자열을 붙여보기 위해 a와 같은 temp를 만든다
		int addfront = i;//temp앞에 붙일 문자열의 개수
		int addback = diff - i;//temp뒤에 붙일 문자열의 개수

		temp = b.substr(0, addfront) + temp;//b의 앞 addfront개를 temp 앞에 붙인다
		temp = temp + b.substr(b.size() - addback, addback);//b의 뒤 addback개를 temp 뒤에 붙인다

		//temp와 b를 비교해 문자가 다른것의 개수를 구한다
		count = 0;
		for (int j = 0; j < b.size(); j++)
		{
			if (temp[j] != b[j])
				count++;
		}
		//최소 개수를 구한다
		minresult = min(minresult, count);

	}

	cout << minresult;

	return 0;
}