문제설명
입출력 예제
개념
주어진 문자열에서 특정 패턴을 찾는 문제다. 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 |