[백준] 문자열
문제요약
길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다.
두 문자열 A와 B가 주어진다. 이때, A의 길이는 B의 길이보다 작거나 같다. 이제 A의 길이가 B의 길이와 같아질 때 까지 다음과 같은 연산을 할 수 있다.
- A의 앞에 아무 알파벳이나 추가한다.
- A의 뒤에 아무 알파벳이나 추가한다.
이때, A와 B의 길이가 같으면서, A와 B의 차이를 최소로 하는 프로그램을 작성하시오.
아이디어
완전탐색으로 풀었다.
X가 Y와 겹쳐 위치할 수 있는 자리를 돌아다니며 각 경우마다 X와 Y가 겹치는 글자수+나머지는 내가 원하는대로 채움
소스코드
#include<iostream>
#include<string>
#include<math.h>
using namespace std;
int ctr_same(string &a, string &b, int s) {
int ret = 0;
for (int i = s; i <= s+a.size()-1; i++) {
if (a[i - s] == b[i]) {
ret++;
}
}
return ret;
}
int main() {
string a, b;
cin >> a >> b;
int max_same = 0;
for (int i = 0; i <= b.size()- a.size(); i++) {
int same = ctr_same(a, b, i);
same += i;
same += b.size() - (i + a.size());
max_same = max(max_same, same);
}
cout << b.size()-max_same << endl;
}
Author And Source
이 문제에 관하여([백준] 문자열), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@coding3392/백준-문자열저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)