본문 바로가기
코딩테스트 공부 2025 Start/1주차 (구현)

9996) 한국이 그리울 땐 서버에 접속하지

by xortl98 2025. 4. 5.
728x90

 출처 

https://www.acmicpc.net/problem/9996

 

 내 풀이 

더보기
더보기
#include<iostream>

using namespace std;

int N = 0;
string pattern;
string input;

int main()
{
	cin >> N;
	cin >> pattern;

	int star = pattern.find('*');

	string front = pattern.substr(0, star);
	string back = pattern.substr(star + 1, pattern.length() - 1);

	for (int i = 0; i < N; i++)
	{
		cin >> input;

		if (input.length() >= front.length() + back.length())
		{
			string input_front = input.substr(0, front.length());
			string input_back = input.substr(input.length() - back.length(), input.length() - 1);

			if (input_front == front && input_back == back)
			{
				cout << "DA" << endl;;
			}
			else cout << "NE" << endl;
		}
		else cout << "NE" << endl;;
	}
}

 

 해설

✅ 문제 요약

한국 서버의 파일 리스트에서 특정 패턴일치하는 파일 이름을 찾는 문제다.
패턴은 소문자 + 별표(*) 하나로 구성되며, *는 소문자 문자열 0개 이상으로 대체 가능하다.

 

✅ 핵심 아이디어

  • 별표 *를 기준으로 패턴을 앞뒤로 나눈다
  • 입력된 문자열이 패턴보다 짧으면 무조건 불일치
  • 입력 문자열이
    • 패턴의 접두사로 시작하고
    • 패턴의 접미사로 끝나면
      → "DA" 출력
      아니라면 "NE" 출력

 

 느낀점 

 

string.find()와 substr() 함수를 익혀서 패턴 매칭에 활용해 봄