모름

요약

이 문제는 문자열 함수 구현 및 반례 체크를 해야하는 문제다.

 

풀이

만약 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";
	}	
}