제가 생각한 솔루션은,
1. 기저사례
- pattern 이 * 만 남거나,
- pattern 길이가 0이면 input 길이도 0이면 성공, 그 외는 실패
2. pattern 이 * 일 경우,
1) input 의 한 문자를 할당하고 나머지 문자열에 대해서 매칭 여부 확인.
2) 공백으로 간주하여 나머지 패턴에 대해서 문자열과 매칭 여부 확인.
3. pattern 이 * 이 아닌 경우
- ? 거나 pattern[0] 과 input[0] 이 같으면 pattern[1:], input[1:] 이 매칭되는지 확인.
도움 부탁 드립니다!
감사합니다.
#include <cstdio>
#include <iostream>
#include <map>
using namespace std;
enum {NONE, TRUE, FALSE};
map< pair<string, string>, int> cache;
int IsMatched(string pattern, string input)
{
if ( pattern.compare("*") == 0 )
return TRUE;
if ( pattern.length() == 0 )
return input.length() == 0 ? TRUE : FALSE;
int& ret = cache[pair<string,string>(pattern, input)];
if ( ret != NONE )
return ret;
ret = FALSE;
if ( pattern[0] == '*' )
{
if ( input.length() > 0 && IsMatched(pattern, input.substr(1)) == TRUE )
ret = TRUE;
else if ( IsMatched(pattern.substr(1), input) == TRUE )
ret = TRUE;
}
else if ( pattern[0] == '?' || pattern[0] == input[0] )
ret = IsMatched(pattern.substr(1), input.substr(1));
return ret;
}
int main()
{
int T;
cin >> T;
while ( T-- )
{
cache.clear();
string pattern;
cin >> pattern;
int inputCnt;
cin >> inputCnt;
for ( int i = 0; i < inputCnt; i++ )
{
string inputStr;
cin >> inputStr;
if ( IsMatched(pattern, inputStr) == TRUE )
cout << inputStr << endl;
}
}
return 0;
}
kwangswei
으으.. 3시간 째 컴파일&런타임 오류로 씨름 중이네요.
조언 부탁 드립니다. ㅡ.ㅜ
런타임오류 페이지 바로가기
문제는 [[problem:WILDCARD]] 입니다.
제가 생각한 솔루션은,
1. 기저사례
- pattern 이 * 만 남거나,
- pattern 길이가 0이면 input 길이도 0이면 성공, 그 외는 실패
2. pattern 이 * 일 경우,
1) input 의 한 문자를 할당하고 나머지 문자열에 대해서 매칭 여부 확인.
2) 공백으로 간주하여 나머지 패턴에 대해서 문자열과 매칭 여부 확인.
3. pattern 이 * 이 아닌 경우
- ? 거나 pattern[0] 과 input[0] 이 같으면 pattern[1:], input[1:] 이 매칭되는지 확인.
도움 부탁 드립니다!
감사합니다.
13년 전