알고리즘 :: 큰돌 :: Chapter1 - 기초 :: 백준 9996 한국이 그리울 땐 서버에 접속하지

Embedded June·2023년 6월 30일
0
post-thumbnail

문제

문제링크

해설

  • 별문자(*)를 기준으로 앞쪽 문자열(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;

        // 1. Check filename has enough length
        if (filename.length() < pattern.length() - 1) {
            cout << "NE\n";
            continue;
        }

        // 2. Check subpattern_front
        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;
        }

        // 3. Check subpattern_back
        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;
};

결과

profile
임베디드 시스템 공학자를 지망하는 컴퓨터공학+전자공학 복수전공 학부생입니다. 타인의 피드백을 수용하고 숙고하고 대응하며 자극과 반응 사이의 간격을 늘리며 스스로 반응을 컨트롤 할 수 있는 주도적인 사람이 되는 것이 저의 20대의 목표입니다.

0개의 댓글