
우선 밑에 있는 코드를 보았다면 난 cpp의 기본 라이브러리는 string과 iostream만 사용했다는 것을 알 수 있는데, 그 이유는 내가 기본 라이브러리들에 대한 지식이 부족하다는 것이다..(강의 보면서 find랑 sub_str을 알게됨) 그렇게 되어 코드의 수가 남달라지게 되는데, 그래도 속도는 4ms로? 생각보다 빠르게 나왔다. 그렇다면, 한번 알고리즘을 짜보자.
알고리즘
- 문자열을 입력받는다.
- 입력받은 문자열에서 크기가 벗어나면 NE를 출력
- 벗어나지 않는다면, 앞에서 부터 체크하는데, 틀리면 NE출력, 만약 맞으면 DA출력
이런식으로 한번 간단하게 알고리즘을 짜보았는데, 필자는 이 간단한 알고리즘도 한번에 성공을 못했다.. :(

이렇게 연속 7번을 틀기고, 한번 성공했는데, 어떻게 긴 코드를 가지고 해결했는지도 의문이다.
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int main() {
string s;
int a, sSize = 0, result = 0;
cin >> a;
cin >> s;
sSize = s.size() - 1;
for (int i = 0; i < a; i++) {
string c;
result = 0;
cin >> c;
//vector<int> cSize(c.size());
if (c.size() >= sSize) {
for (int j = 0; j < c.size(); j++) {
// 별표면 끊기
if (s[j] == '*') break;
// 틀리면 끊기
if (s[j] != c[j]) {
result = 0;
break;
}
//맞으면 카운트
if (s[j] == c[j]) {
result++;
}
}
for (int k = 0; k < c.size(); k++) {
// 앞에서 틀렸으니 끊기
if (result == 0) {
break;
}
// 별이면 끊기
if (s[s.size() - k] == '*') break;
// 뒷부분에서 틀리면 끊기
if (s[s.size() - k] != c[c.size() - k]) {
result = 0;
break;
}
// 맞으면 카운트
if (s[s.size() - k] == c[c.size() - k]) {
result++;
}
}
}
// 틀렸으니 NE출력후 다음으로 넘어가기
if (result == 0) {
cout << "NE\n";
continue;
}
cout << "DA\n";
}
}