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

고재욱·2021년 8월 24일

Baekjoon

목록 보기
7/35

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

브루트포스 알고리즘으로 간단하지만 생각보다 예외?가 있어 한번에 맞추지 못한 문제이다.

  1. 패턴 문자를 입력 받고, 각 문장을 입력 받는다. getline(cin, tmp)로 받아야 공백도 받는다.

  2. 패턴의 * 모양 전의 문자와 입력 받은 문장을 비교하여 다르면 NA
    그리고 visit란 배열을 만들어 방문한 문자열의 위치를 true로 만든다.

  3. 패턴의 * 모양 뒤의 문자와 입력 받은 문장의 뒷 부분을 비교하여 다르면 NA
    그리고 visit 배열이 true면 NA를 프린트한다.

Python의 정규표현식을 사용해봐야겠다.

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool visit[100];
int main() {
	int n;
	cin >> n;
	string pattern, tmp;
	cin >> pattern;
	cin.ignore();
	int check=0;
	string first="", second="";
	for (int i = 0; i < pattern.size(); i++) {
		if (pattern[i] == '*') {
			check = 1;
			continue;
		}
		if (check == 0)
			first += pattern[i];
		else
			second += pattern[i];
	}
	reverse(second.begin(), second.end());
	for (int i = 0; i < n; i++) {
		getline(cin,tmp);
		
		bool aws = true;
		for (int j = 0; j < first.size(); j++) {
			visit[j] = true;
			if (first[j] != tmp[j]) {
				aws = false;
				break;
			}
		}
		for (int j = 0; j < second.size(); j++) {
			if (visit[tmp.size() - 1 - j]) {
				aws = false;
				break;
			}
			if (second[j] != tmp[tmp.size() - 1 - j]) {
				aws = false;
			}
		}
		if (aws)
			cout << "DA\n";
		else
			cout << "NE\n";
		for (int j = 0; j < 100; j++)
			visit[j] = false;
	}
}

0개의 댓글