인프런 커뮤니티 질문&답변
안녕하세요 케이스 질문 처음 올려드립니다.
작성
·
230
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 끝인데 혹시 찾는 문자인덱스가 중복되는 경우는 고려하지않아도 괜찮은건가요!?