문제링크
https://www.acmicpc.net/problem/9996
풀이방법
String STL을 사용하여 쉽게 해결 할 수 있다. 두가지 조건에 대한 아이디어만 얻으면 쉽게 해결할 수 있다.
- 첫번째, 파일이름의 길이가 패턴이름에서 * 하나를 뺀 값 보다 작은 경우에는 당연히 패턴과 일치할 수 없다.
- 위 경우를 제외하고는 패턴이름의 앞 문자열과 뒤 문자열이 파일이름의 앞 문자열(패턴 이름의 앞문자열의 길이만큼) 뒤 문자열과(패턴 이름의 뒤 문자열 길이만큼)둘다 같으면 패턴이 일치하고 그렇지 않으면 패턴이 일치하지 않는다.
위 내용을 참고해서 코드를 보면 이해가 될 것 이다. 참고로 String STL에 포함된 substr 함수를 사용하니 해당 함수의 사용법을 익히도록 하자.
String 객체에 대해서 잘 모른다면 아래 영상을 참고하자
코드
#include <bits/stdc++.h>
using namespace std;
vector<string> split (const string& s,const string& sep)
{
vector<string> ret;
int pos = 0;
while (pos < s.size())
{
int nxt_pos = s.find(sep, pos);
if (nxt_pos == -1) nxt_pos = s.size();
if (nxt_pos - pos > 0)
ret.push_back(s.substr(pos, nxt_pos - pos));
pos = nxt_pos + sep.size();
}
return ret;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
string s1,s2;
cin >> n;
cin >> s1;
int pos = s1.find("*");
string first = s1.substr(0, pos);
string last = s1.substr(pos+1, s1.size());
while (n--)
{
cin >> s2;
if (s2.size() < first.size() + last.size())
{
cout << "NE" << '\n';
continue;
}
if (first == s2.substr(0, first.size()) && last == s2.substr(s2.size() - last.size(), s2.size()))
{
cout << "DA" << '\n';
}
else
{
cout << "NE" << '\n';
}
}
}
'CS(Computer Science)지식 > [C++][코딩 테스트] 자료구조 및 알고리즘' 카테고리의 다른 글
[C++] 백준 2870번: 수학숙제 (0) | 2024.02.04 |
---|---|
[C++] 백준 3613번: Java vs C++ (0) | 2024.02.04 |
[C++] 백준 2941번: 크로아티아 알파벳 (0) | 2024.02.04 |
[C++] 백준 1543번: 문서 검색 (0) | 2024.02.04 |
[C++] 백준 5052번: 전화번호 목록 (0) | 2024.02.04 |