본문 바로가기
CS(Computer Science)지식/[C++][코딩 테스트] 자료구조 및 알고리즘

[C++] 백준 9996번: 한국이 그리울 땐 서버에 접속하지

by 엔지니어 청년 2024. 2. 4.

문제링크

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';
		}
		
	}
}