작성
·
202
1
9996번 문제입니다
#include <iostream>
#include <vector>
using namespace std;
int N;
string strPattern;
vector<string> v;
string input;
int main()
{
cin >> N;
cin >> strPattern;
string left = "";
string right = "";
int index = 0;
while (strPattern[index] != '*')
{
left += strPattern[index];
++index;
}
index = strPattern.find('*') + 1;
right = strPattern.erase(0, index);
for (int i = 0; i < N; ++i)
{
cin >> input;
v.push_back(input);
}
for (int i = 0; i < v.size(); ++i)
{
// +ADD
if (left.size() + right.size() > v[i].size())
{
cout << "NE" << endl;
continue;
}
//
string leftcopy = v[i];
string rightcopy = v[i];
if (left.size() <= leftcopy.size())
leftcopy = leftcopy.erase(left.size(), leftcopy.size() - 1);
if (right.size() <= rightcopy.size())
rightcopy = rightcopy.erase(0, rightcopy.size() - right.size());
if (leftcopy == left && rightcopy == right)
cout << "DA" << '\n';
else
cout << "NE" << '\n';
}
return 0;
}
코드를 이렇게 작성하고 저쪽 주석 +ADD 부분이 없을때는 65% 에서 Fail 뜨고 저 ADD 부분을 추가했을때 성공이 떴습니다
1
a*aaa
aaa
일때 정답이 어떻게 되는지 설명 부탁드립니다!
제가 생각했을때는 DA 같습니다!
답변 1
1
안녕하세요 종호님 ㅎㅎ
1
a*aaa
aaa
>> 음.. DA가 아니라 NE입니다.
*가 아무것도 없다고 가정해도 최소 aaaa가 되어야 하기 때문입니다.
ADD 부분을 추가했을때 성공이 떴습니다
>> 사이즈 체킹을 해야 하기 때문입니다. 예를 들어
ab*ab
ab
라는게 있다 했을 때 문자열은 최소 ab + ab 즉, 4개의 크기 이상을 가져야 합니다. 이걸 체킹못하면 ab가 NE가 아닌 DA가 나와 버리게 되는 것이죠. 그부분을 고려하기 위해서 사이즈 체킹을 하는 것입니다.
또 질문 있으시면 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다.
감사합니다.
알려주셔서 감사합니다!
제가말씀드린 케이스에 대해서 질문이 있는데 a는 앞에서 a 시작 aaa 는 뒤에서 aaa 끝인데 혹시 찾는 문자인덱스가 중복되는 경우는 고려하지않아도 괜찮은건가요!?