문제
https://www.acmicpc.net/problem/9996
Algorithm
입력받은 패턴의 *를 제외한 문자들의 길이가 입력받은 문자열 보다 길다면 일치하지 않다. 이를 제외한 경우 패턴과 입력받은 문자열의 시작 인덱스인 0과 패턴의 배열 마지막인덱스 패턴문자열 길이 -1, 입력받은 문자열의 마지막 인덱스인 문자열 길이 -1로 하여 앞쪽부터 하나씩 *를 만나기 전까지 계속해서 입력받은 문자열과 패턴을 상호비교 만약 비교도중 하나라도 다르다면 반복문을 탈출과 일치하지 않음을 반환 만약 앞쪽이 별표전 까지 모두 일치하다면 뒤쪽부터 한칸씩 상호 비교한 이후 뒤쪽도 불일치가 나온다면 반복문 탈출 모두 동일하다면 찾았음을 반환 이후 해당하는 문자열을 출력
Code
#include<iostream>
#include<string>
using namespace std;
int find(const string &pt);//반환값 0 불일치, 1 일치
int main(){
int N;
const char *f[2]={"NE","DA"};//f[0] 불일치 ,f[1] 일치
string pattern;
cin>>N;
cin>>pattern;
for(int i=0;i<N;i++){
cout<<f[find(pattern)]<<endl;
}
return 0;
}
int find(const string &pt){
string line;
cin>>line;
int P_bool=1; //일치함을 가정
int P_start=0,L_start=0,P_end=pt.length()-1,L_end=line.length()-1;//패턴과 문자열의 시작과 끝인덱스
if(P_end>L_end+1){//만약 패턴의 *제외한 문자열 길이가 입력받은 문자열 보다 길다면 불일치
return 0;
}
while(1){//처음부터 하나씩 별표 만나기전까지 비교
if(pt[P_start]!='*'){
if(pt[P_start++]!=line[L_start++]){
P_bool=0;
break;
}
}
else{
break;
}
}
while(P_bool){//만약 앞쪽이 전부 일치하다면 뒤쪽도 하나씩 별표 만나기 전까지 비교
if(pt[P_end]!='*'){
if(pt[P_end--]!=line[L_end--]){
P_bool=0;
break;
}
}
else{
break;
}
}
return P_bool;//일치 불일치 여부를 정수형으로 반환
}
'Koala - 17기 > 코딩테스트 기초 스터디' 카테고리의 다른 글
[백준/C++] 18111번 마인크래프트 (0) | 2025.01.19 |
---|---|
[백준/Python] 8958번 OX퀴즈 (0) | 2025.01.19 |
[백준/Python] #4435 중간계 전쟁 (0) | 2025.01.12 |
[백준/Python]2839번 : 설탕 배달 (0) | 2025.01.12 |