1120번: 문자열
길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다. 두 문자열 A와 B가 주어진다. 이때, A의 �
www.acmicpc.net
이 문제가 왜 그리디 알고리즘으로 분류되어있는지 아리송한 문제였다.
필자는 완전탐색으로 풀이했다고 생각한다.
A문자열이 B문자열보다 짧을 경우 문자열 앞뒤로 아무 알파벳을 추가할 수 있다는 것은 B문자열과 일치하는 문자들을 추가할 수 있다는 뜻이기 때문에 A, B 문자열의 길이 차이만큼 한 칸씩 밀어서 비교하여 그중 차이가 최소인 값을 찾으면 그 값이 정답이 된다.
#include <iostream>
#include <string>
using namespace std;
const int INF = 987654321;
int min(int a, int b) { return a < b ? a : b; }
int Greedy(string& a, string& b)
{
int aLen = a.length();
int bLen = b.length();
int diff = bLen - aLen;
int ret = INF;
for (int i = 0; i <= diff; i++)
{
int res = 0;
for (int j = 0; j < aLen; j++)
if (a[j] != b[i + j])
res++;
ret = min(ret, res);
}
return ret;
}
int main(void)
{
string A, B;
cin >> A >> B;
cout << Greedy(A, B) << endl;
return 0;
}
알고리즘 200일 프로젝트 - 111 day
'알고리즘 > BOJ' 카테고리의 다른 글
백준 1049번: 기타줄 (0) | 2020.07.28 |
---|---|
백준 1946번: 신입 사원 (0) | 2020.07.27 |
백준 2875번: 대회 or 인턴 (0) | 2020.07.27 |
백준 1541번: 잃어버린 괄호 (0) | 2020.07.26 |
백준 10610번: 30 (0) | 2020.07.26 |