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;
}
}