PS_Baekjoon

[백준 C++] 6550번 : 부분 문자열

SMILELY 2023. 4. 15. 19:51

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

 

6550번: 부분 문자열

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문자열 s 와 t가 빈칸을 사이에 두고 들어온다. s와 t의 길이는 10만을 넘지 않는다.

www.acmicpc.net

풀이 :

- 문자열 s와 t 2개가 주어지는데, s가 t의 부분 문자열인지를 판별해야 한다

- s는 연속적이지 않게 t에 속해있을 수도 있다

- t를 전체 탐색을 하며 s와 같을 때마다 s의 인덱스를 하나씩 밀고,

   반복문을 빠져나왔을 때 s의 인덱스가 끝까지 밀어졌다면 속하는 것이고 그렇지 않다면 속하지 않는 것으로 판별할 수 있다

 

코드 :

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

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

    int indx;
    string s, t;
    bool res;

    while(cin >> s >> t){ //입력이 주어지지 않을 때까지 계속 반복
        res = true;
        indx = 0;
        if(s.size() > t.size()){ //s가 t보다 크기가 크다면 속할 수 없다
            res = false;
        }else{
            for(int i=0; i<t.size(); i++){ //t를 전체 탐색하면서
                if(s[indx] == t[i]){ //s의 자리와 같은 자리가 나오면 
                    indx++; //indx 하나 뒤로 밀어준다
                }
            }
            if(indx != s.size()){ //사이즈와 같지 않다면 즉, 
                res = false; //부분 문자열이 아니라면 false
            }
        }
        (res ? cout << "Yes" : cout << "No");
        cout << endl;
    }
}