문제
문제링크
해설
- 별문자(*)를 기준으로 앞쪽 문자열(prefix)와 뒤쪽 문자열(suffix)을 추출합니다.
- 주어진 문자열의 앞쪽부터 검사하며 prefix를 포함하는지 검사합니다.
- 주어진 문자열의 뒤쪽부터 검사하며 suffix를 포함하는지 검사합니다.
- 이때, 주어진 문자열은 prefix와 suffix를 포함해야하므로 최소한 prefix + suffix의 길이를 갖고 있어야 합니다. (★ 중요! ★)
- prefix와 suffix를 추출할 때는 string 컨테이너의 substr() 멤버함수를 활용하면 쉽습니다.
코드
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int n;
cin >> n;
string pattern;
cin >> pattern;
auto star = pattern.find('*');
string subpattern_front = pattern.substr(0, star);
string subpattern_back = pattern.substr(star + 1);
while (n--) {
bool correct = true;
string filename;
cin >> filename;
if (filename.length() < pattern.length() - 1) {
cout << "NE\n";
continue;
}
for (int i = 0; i < subpattern_front.length(); i++) {
if (filename[i] != subpattern_front[i]) {
correct = false;
break;
}
}
if (correct == false) {
cout << "NE\n";
continue;
}
for (int i = 0, j = filename.length() - subpattern_back.length();
i < subpattern_back.length(); i++) {
if (filename[j + i] != subpattern_back[i]) {
correct = false;
break;
}
}
if (correct == false) {
cout << "NE\n";
continue;
}
cout << "DA\n";
}
return 0;
};
결과