Algorithm/백준

[백준] 1013 Contact With C++

nowkoes 2023. 8. 1. 14:59

문제설명


입출력 예제


개념

출처: cppreference

 

 주어진 문자열에서 특정 패턴을 찾는 문제다. C++에서 문자열에서 특정 패턴을 찾는 데 사용할 수 있는 주요 라이브러리로는 정규 표현식(Regex) 라이브러리 regex가 있다. 이는 문자열 검색 알고리즘이 사용할 수 있는 템플릿으로 작동한다. 이를 이용하여 문자열에서 특정 내용을 찾거나 대체하거나, 입력된 문자열이 특정 패턴과 일치하는지 확인하는 등의 작업을 수행할 수 있다.

 

 정규 표현식의 구문 중 문제에서 제시하는 표현들은 다음과 같다.

 

  • abc: 정확히 abc와 일치하는 문자열을 찾는다
  • a+: a가 1번 이상 반복되는 문자열을 찾는다
  • (ab)+: ab가 1번 이상 반복되는 문자열을 찾는다
  • a|b: a또는 b를 찾는다

 

 이를 이용하여 정규 표현식 패턴을 나타내는 클래스인 regex를 초기화하고, regex_match() 함수를 통해 문자열 전체가 정규 표현식과 일치하는지 확인하면 문제를 해결할 수 있다.


풀이

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

int main()
{
    int T;
    cin >> T;

    while (T--)
    {
        string str;
        cin >> str;
        regex pattern("(100+1+|01)+");

        if (regex_match(str, pattern))
            cout << "YES\n";

        else
            cout << "NO\n";
    }
}

 문제에서 제시하는 패턴은 (100+1+|01)+라고 하였으므로, 패턴에 해당 문자열을 삽입한 뒤, 입력값이 일치하는지 확인하면 된다.

반응형

'Algorithm > 백준' 카테고리의 다른 글

[백준] 2217 로프 with C++  (0) 2024.03.08
[백준] 1015 수열 정렬 with C++  (0) 2023.08.02
[백준] 1004 어린 왕자 with C++  (0) 2023.07.28
[백준] 1002 터렛 with C++  (0) 2023.07.20
[백준] 1094 막대기 with C++  (0) 2023.07.04