https://www.acmicpc.net/problem/9996
#include <iostream>
#include <vector>
using namespace std;
int n{};
string s{}, ori_s, pre, suf;
int main()
{
cin >> n;
cin >> ori_s;
int pos = ori_s.find('*');
pre = ori_s.substr(0, pos);
suf = ori_s.substr(pos + 1);
for (int i = 0; i < n; i++)
{
cin >> s;
if (pre.size() + suf.size() > s.size())
cout << "NE" << endl;
else
{
if (pre == s.substr(0, pre.size()) && suf == s.substr(s.size() - suf.size()))
cout << "DA" << endl;
else
cout << "NE" << endl;
}
}
}
- 아이디어가 떠오르지 않고 문제가 이해하기 난해했다 해야하나? 그래서 어려웠던 문제이다
- 오류가 뜨는 패턴이 * 앞뒤에 문자가 들어가는데 파일 이름에 앞 뒤에 그 문자가 들어가 있어야 한다
- 즉 a*d면 aaslkdjfklasjflksjakldfjlkdasjd 이런식으로 맨 앞은 a, 맨 뒤는 d가 들어가야한다
- 또한 앞뒤 문자가 문자열로 되어 있을 수 도 있다는 생각을 하고 풀어야 한다
- 오류 패턴 ori_s를 입력받아 *가 들어가는 위치를 find 함수를 통해 찾아준다
- substr() 함수는 첫번째 파라미터 값 부터 두 번째 파라미터 값 전 까지 리턴해주는 함수로 pre 변수에 ori_s의 0번지부터 *이 있는 지점 전까지 저장해준다
- 마찬가지로 *이 있는 다음 지점부터 끝까지 suf에 저장해주어 앞뒤 문자를 따로 변수로 저장했다
- 이제 파일 이름을 입력받고 앞뒤 문자열의 사이즈를 더한 값보다 파일이름의 문자열 사이즈가 더 작다면 비교할 필요도 없이 일치하지 않으므로 NE를 출력한다
- 그렇지 않다면 substr()함수를 사용해서 파일의 0번지부터 앞 문자의 사이즈만큼 뽑아 앞 문자와 비교하고, 파일의 문자열 사이즈와 뒤 문자열의 사이즈를 뺀 값부터 끝까지 파일의 문자열을 뽑아 뒤 문자열과 비교한다
- 두개다 모두 같다면 파일이 존재한 것이므로 DA를 아니면 NE를 출력하면 된다
'코딩 태스트 > 문제풀이' 카테고리의 다른 글
나는야 포켓몬 마스터 이다솜(x) (0) | 2025.01.10 |
---|---|
수열 (0) | 2025.01.10 |
ROT13 (0) | 2025.01.10 |
농구경기 (1) | 2025.01.10 |
팰린드롬인지 확인하기 (0) | 2025.01.10 |