PS_Baekjoon

[백준 C++] 1120번 : 문자열

SMILELY 2023. 4. 3. 09:46

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의 차이만 구하면 된다
- a는 b보다 작거나 같고, 최대 길이는 50이라서 하나씩 다 돌려도 시간 초과가 안 난다
- b를 하나씩 밀어가면서 a를 탐색할 건데, b를 밀었을 때 a의 마지막 지점이 b의 크기보다 작거나 같을 때만 비교한다
- 예시

012345 0123456
aabbcc aaabbcc

b가 0일 때는 a의 마지막 지점이 5. b의 크기 6보다 작아서 돌아간다
b가 1일 때는 a의 마지막 지점이 6. b의 크기와 같아서 돌아간다
b가 2이상이 되면 a의 마지막 지점이 7이상이 된다. b의 크기보다 커지게 되어 돌아가지 않는다

 
코드 :

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

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

    int ans = 50, cnt; //최대 길이가 50 즉, 전부 같지 않더라도 50이라서 ans의 초깃값은 50
    string a, b;

    cin >> a >> b;
    for(int i=0; i<b.size(); i++){ //b를 기준으로 탐색
        if(i+a.size() <= b.size()){ //a의 크기 즉, 마지막 자리가 b의 크기보다 같거나 작다면
            cnt = 0; 
            for(int j=0; j<a.size(); j++){ //a를 탐색한다
                if(b[i+j] != a[j]){ //b를 하나씩 밀기 위해 b의 인덱스는 i+j
                    cnt++; //같지 않을 때 카운트
                }
            }
            ans = min(ans,cnt); //최솟값 갱신
        } 
    }
    cout << ans << '\n';
}