인프런 커뮤니티 질문&답변

종호님의 프로필 이미지
종호

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

1-G

안녕하세요 케이스 질문 처음 올려드립니다.

작성

·

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 끝인데 혹시 찾는 문자인덱스가 중복되는 경우는 고려하지않아도 괜찮은건가요!?

큰돌님의 프로필 이미지
큰돌
지식공유자

네 맞습니다.

예를 들어 이렇게 중복되는 경우

즉,

a*aaa

aaaaaa

인 경우에 맞는 케이스가 됩니다.

 

종호님의 프로필 이미지
종호

작성한 질문수

질문하기