요약
이 문제는 문자열 함수 구현 및 반례 체크를 해야하는 문제다.
풀이
만약 ab*cde 라는 수가 주어지면 '*'를 기준으로 문자열의 앞 뒤를 짤라서 가지고 있어야한다.
그럼 앞: ab, 뒤: cde라는 수를 가지게된다.
그리고 이어서 들어오는 문자열을 앞 ab(length 2)만큼 짤라 비교하고, 뒤도 마찬가지로 계산하면 된다. 그러면 일단 예제 입출력은 비교가 가능해진다.
하지만 반례가 있는데, 입력된 문자열이 패턴 문자열에서 '*'를 뺀 길이보다 작을 경우 이는 비교가 불가한 문자열 이라는 것이다. 즉 pattern_string.length() - 1 보다 입력된 문자열이 작으면 안된다는 반례가 있으니 잘 체크해야한다.
코드
#include <iostream>
#include <string>
using namespace std;
int main()
{
int N;
cin >> N;
string ptn;
cin >> ptn;
int pos = ptn.find('*');
string first = ptn.substr(0, pos);
string last = ptn.substr(pos+1, ptn.length());
for(int i = 0; i < N; i++){
string input;
cin >> input;
if(input.length() < first.length() + last.length()){
cout << "NE" << "\n";
continue;
}
string compfirst = input.substr(0, first.length());
string complast = input.substr(input.length()-last.length(), input.length());
if(compfirst == first && complast == last)
cout << "DA" << "\n";
else
cout << "NE" << "\n";
}
}