※이 설명은 공식 솔루션이 아닌 작성자의 개인적인 솔루션입니다.
실제로 스트링이 일치하는지 찾는 경우에는 구현을 해주셔야 합니다. 하지만 STL을 사용할 수 있는 경우, 정규표현식을 통해 이를 해결할 수 있습니다. 정규표현식을 사용하는 것은 나쁜 것이 아닙니다. 이미 수많은 언어에서는 정규표현식을 제공하고 있으며, C++에서도 <regex> 파일을 include하여 정규표현식 매칭을 사용할 수 있습니다.
문제에서 주어진 식의 정규표현식은(100[0]{0,}1[1]{0,}|01){1,} 입니다.
※해당 소스코드는 참고용이며, 최적화 된 공식 솔루션 소스가 아닙니다. 이 소스를 그대로 복사하여 이용, 또는 제출하는 행위에 대한 불이익은 책임지지 않습니다.
#include<iostream>
#include<string>
#include<regex>
using namespace std;
int main()
{
string s;
regex e("(100[0]{0,}1[1]{0,}|01){1,}");
while (1)
{
cin >> s;
if (cin.fail()) break;
if (regex_match(s, e)) cout << "SUBMARINE\n";
else cout << "NOISE\n";
}
}