백준 9996 : 한국이 그리울 땐 서버에 접속하지

혀니앤·2022년 3월 8일
0

C++ 알고리즘

목록 보기
103/118

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

1. 접근

  • *는 공백을 대신할 수 있기때문에, 앞과 뒤만 맞으면 된다.
  • 개인적으로, 테스트케이스가 너무 잘못돼서 풀기 어려웠던 문제였다..
  • ad*bcd 라는 패턴이 있다면, 시작은 ad로, 끝은 bcd로 끝나야한다
  • 은 반드시 하나가 나오기 때문에, 을 기점으로 파일 이름을 나누어 앞의 부분이 일치하면, 맨뒷부분만 체크하면 된다
  • 패턴이 a*a이고 파일이름이 a라면 (패턴의 길이가 더 길면) 검사할 필요 없이 무조건 일치하지 않으므로 바로 NE를 출력해준다.

2. 나의 풀이

#include <iostream>
#include <string>
using namespace std;
int main() {
	int n; 
    string s; 
    
    cin >> n;
    cin >> s;
	int index = s.find('*');
	string part1 = s.substr(0, index);
	string part2 = s.substr(index + 1);
	while (n--) {
		string cmp = "";
		cin >> cmp;
		if (part1.size() + part2.size() > cmp.size())cout << "NE\n";
		else if (cmp.find(part1) == 0) { 
			string ex = cmp.substr(cmp.size() - (part2.size()));
			if (ex == part2)cout << "DA\n";
			else cout << "NE\n";
		}
		else cout << "NE\n";
	}
}
profile
일단 시작하기

0개의 댓글