단순 그리디. B 안에서의 차이가 가장 적은 A를 구하면 그게 답이다.
추가하는 연산은 무조건 차이가 가장 적게 할 테니까 신경 쓰지 않는다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include <iostream> using namespace std; int main() { char a[50], b[50]; cin >> a >> b; int al = sprintf(a, "%s", a); int bl = sprintf(b, "%s", b); int c = 51; for(int i = 0; i < bl - al + 1; i++) { int co = 0; for(int j = 0; j < al; j++) { if(b[j+i] != a[j]) co++; } if(co < c) c = co; } cout << c; }
|
지금보면 좀 한심한 코드다.
배열 길이 구하겠다고 sprintf를 썼다.
시간나면 수정해서 다시 올리자.
불편해서 바로 해버렸다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include <iostream> using namespace std; int main() { string a, b; cin >> a >> b; int c = 51; for(int i = 0; i < b.size() - a.size() + 1; i++) { int co = 0; for(int j = 0; j < a.size(); j++) if(b[j+i] != a[j]) co++; if(co < c) c = co; } cout << c; }
|