Algorithm/Greedy Algorithm

[ BOJ 6550 ] S5 부분 문자열 { C++ }

surimi🍥 2022. 6. 27. 18:18
반응형

6550번: 부분 문자열

 

6550번: 부분 문자열

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

www.acmicpc.net

  • 입력 데이터의 개수가 주어지지 않으므로, 무한루프로 돌다가 공백이 입력되면 break
  • 문자열 t의 각 문자들을 한 번씩 순회하며 s가 가진 문자가 나올 때마다 idx를 높여준다.
  • 순회 종료 후 idx와 s의 길이가 같으면 순서대로 모두 존재하는 것이므로 Yes.

C++

#include <iostream>
using namespace std;

int main(void)
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    string S, s, t;

    /*************************************
    S : 전체 문자열
    s, t : 공백 기준으로 잘라낸 문자열 (문자열 s, t의 길이 < 100,000)
    **************************************/

    while (1)
    {
        getline(cin, S);
        if (S == "") break;
        int sp = S.find(" "), idx = 0;

        s = S.substr(0, sp);
        t = S.substr(sp + 1, S.size());

        for (char c : t)
            if (c == s[idx])
                idx++;

        cout << (idx == s.size() ? "Yes\\n" : "No\\n");
    }

}
반응형