Notice
Recent Posts
Recent Comments
Link
알고리즘 모음(C++)
백준 9996 - 한국이 그리울 땐 서버에 접속하지(C++) 본문
문제 링크입니다. https://www.acmicpc.net/problem/9996
패턴이 주어졌을 때, 파일 이름이 패턴과 일치한지 구하는 문제입니다.
패턴은 *을 기준으로 앞과 뒤로 구분이 가능합니다.
파일이 이름의 처음과 마지막이 패턴의 앞과 뒤가 일치하면 됩니다.
여기서 중요한 것은 패턴을 확인할 때 중복되면 안된다는 것입니다.
예를 들어, 패턴이 ab*bc라고 할 때, abc는 패턴의 앞과 뒤는 같지만, b가 겹치기 때문에 패턴과 일치하지 않습니다.
따라서, 패턴을 확인할 때 어느 지점까지 확인했는지 저장을 해줘야 합니다.
처음에 패턴을 입력 받을 때, *을 기준으로 나눠서 구분합니다.
파일 이름을 입력 받은 뒤, 파일의 처음과 패턴의 앞, 파일의 마지막과 패턴의 뒤가 일치하는지 확인해주면 됩니다.
자세한 것은 코드를 참고해주세요
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>
using namespace std;
int N;
string pattern;
string Front, Back;
int flag = 0;
int check[101];
int main(){
cin.tie(0);
cout.tie(0);
cin >> N;
cin >> pattern;
for(int i = 0; i < pattern.size(); i++){
if(pattern[i] == '*'){
flag = 1;
continue;
}
if(flag == 0) Front += pattern[i];
else Back += pattern[i];
}
for(int i = 0; i < N; i++){
string x;
bool correct = true;
cin >> x;
memset(check, 0, sizeof(check));
for(int i = 0; i < Front.size(); i++){
if(x[i] != Front[i]) correct = false;
check[i] = 1;
}
for(int i = 0; i < Back.size(); i++){
if(check[x.size() - Back.size() + i] == 1) correct = false;
if(x[x.size() - Back.size() + i] != Back[i]) correct = false;
check[i] = 1;
}
if(correct) cout << "DA" << "\n";
else cout << "NE" << "\n";
}
return 0;
}
질문 및 조언은 댓글을 남겨주세요
'백준' 카테고리의 다른 글
백준 1769 - 3의 배수(C++) (0) | 2023.06.01 |
---|---|
백준 15904 - UCPC는 무엇의 약자일까?(C++) (0) | 2023.06.01 |
백준 9093 - 단어 뒤집기(C++) (0) | 2023.05.28 |
백준 2810 - 컵홀더(C++) (0) | 2023.05.28 |
백준 25372 - 성택이의 은밀한 비밀번호(C++) (0) | 2023.05.28 |