Prog&Algol
BJ | 9996 | connect server when missing Korea
GilbertPark
2022. 3. 29. 09:34
의식의 흐름대로 짠 소스
개선점 : 모든 케이스를 모두 디버깅 하기 힘듬
#include <iostream>
#include <vector>
using namespace std;
int main(){
string inputPat;
string inputStr;
vector<string> result;
int cntStr;
int checked;
cin >> cntStr;
cin >> inputPat;
for (int i=0;i<cntStr;i++){
cin >> inputStr;
int fi=0;
int pi=0;
int si=0;
//check front pattern
for (;fi<inputPat.length() && fi<inputStr.length() && inputPat[fi]!='*';fi++){
if ( inputPat[fi] == inputStr[fi]) {
checked = 1;
} else {
checked = 0;
break;
}
}
if (inputPat[fi] !='*') checked = 0;
//check last pattern
if ( checked ==1 && inputPat[fi]=='*' ){
pi = inputPat.length()-1;
si = inputStr.length()-1;
for (; inputPat[pi]!='*' && pi>0 && si>0 && si>=fi ; pi--, si-- ){
if ( inputPat[pi] == inputStr[si]) {
checked = 1;
} else {
checked = 0;
break;
}
}
if (inputPat[pi] !='*') checked = 0;
}
if (checked == 1) result.push_back("DA");
else result.push_back("NE");
}
for (auto a : result) cout << a << "\n";
return 0;
}
std 를 사용해서 조금더 간략화
개선점 : 가장 큰 조건을 먼저 처리하자 > 그리고 나서 세부 조건을 처리
여러 레벨의 조건을 간략화 하
#include <iostream>
#include <vector>
using namespace std;
int main(){
string inputPat;
string frontPat;
string endPat;
vector<string> result;
int cntStr;
int checked;
int stari;
cin >> cntStr;
cin >> inputPat;
stari = inputPat.find("*");
frontPat = inputPat.substr(0,stari);
endPat = inputPat.substr(stari+1,inputPat.length()-1);
for (int i=0;i<cntStr;i++){
string inputStr;
cin >> inputStr;
string frontStr;
string endStr;
checked = 0;
//check front pattern
if (inputStr.length()>=frontPat.length()){
frontStr = inputStr.substr(0,stari);
if (frontStr == frontPat){
inputStr.erase(0,stari);
//check last pattern
if (inputStr.length()>=endPat.length()){
endStr = inputStr.substr(inputStr.length()-endPat.length(), endPat.length() );
if (endStr == endPat) {
checked = 1;
}
}
}
}
if ( checked ==1 ) result.push_back("DA");
else result.push_back("NE");
}
for (auto a : result) cout << a << "\n";
return 0;
}
불필요한 검사 제거
#include <iostream>
#include <vector>
using namespace std;
int main(){
string inputPat;
string frontPat;
string endPat;
vector<string> result;
int cntStr;
int checked;
int stari;
cin >> cntStr;
cin >> inputPat;
stari = inputPat.find("*");
frontPat = inputPat.substr(0,stari);
endPat = inputPat.substr(stari+1,inputPat.length()-1);
for (int i=0;i<cntStr;i++){
string inputStr;
cin >> inputStr;
checked = 0;
//check front pattern
if ( inputStr.length() >= frontPat.length()+endPat.length()) {
if ( (frontPat == inputStr.substr(0, frontPat.length())) &&
(endPat == inputStr.substr(inputStr.length()-endPat.length())) )
checked = 1;
}
if ( checked ==1 ) result.push_back("DA");
else result.push_back("NE");
}
for (auto a : result) cout << a << "\n";
return 0;
}
반응형