브루트포스 알고리즘으로 간단하지만 생각보다 예외?가 있어 한번에 맞추지 못한 문제이다.
패턴 문자를 입력 받고, 각 문장을 입력 받는다. getline(cin, tmp)로 받아야 공백도 받는다.
패턴의 * 모양 전의 문자와 입력 받은 문장을 비교하여 다르면 NA
그리고 visit란 배열을 만들어 방문한 문자열의 위치를 true로 만든다.
패턴의 * 모양 뒤의 문자와 입력 받은 문장의 뒷 부분을 비교하여 다르면 NA
그리고 visit 배열이 true면 NA를 프린트한다.
Python의 정규표현식을 사용해봐야겠다.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool visit[100];
int main() {
int n;
cin >> n;
string pattern, tmp;
cin >> pattern;
cin.ignore();
int check=0;
string first="", second="";
for (int i = 0; i < pattern.size(); i++) {
if (pattern[i] == '*') {
check = 1;
continue;
}
if (check == 0)
first += pattern[i];
else
second += pattern[i];
}
reverse(second.begin(), second.end());
for (int i = 0; i < n; i++) {
getline(cin,tmp);
bool aws = true;
for (int j = 0; j < first.size(); j++) {
visit[j] = true;
if (first[j] != tmp[j]) {
aws = false;
break;
}
}
for (int j = 0; j < second.size(); j++) {
if (visit[tmp.size() - 1 - j]) {
aws = false;
break;
}
if (second[j] != tmp[tmp.size() - 1 - j]) {
aws = false;
}
}
if (aws)
cout << "DA\n";
else
cout << "NE\n";
for (int j = 0; j < 100; j++)
visit[j] = false;
}
}