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