Memoization을 배우는 단원이지만
일단은 풀어보고 나서 메모이제이션을 적용시키려는 생각으로
아직은 일일이 계산만 하는 코드를 작성했습니다.
TLE가 나기를 바라면서 코드를 제출했는데
매번 오답 판정이 뜨네요ㅠㅠ.
혹시 무엇이 문제인지 알 수 있을까요~~?
알려주시면 감사하겠습니다~!
#include <iostream>#include <vector>#include <string>usingnamespacestd;boolmatch(stringw,stringf,intw_i,intf_i);voidsortString(stringv[],intn);intmain(void){intnumOfTestCases;cin>>numOfTestCases;for(inti=0;i<numOfTestCases;i++){stringwildCard;cin>>wildCard;intn;cin>>n;string*fileName=NULL;fileName=newstring[n];for(intj=0;j<n;j++){cin>>fileName[j];}sortString(fileName,n);for(intk=0;k<n;k++){if(match(wildCard,fileName[k],0,0))cout<<fileName[k]<<endl;}}return0;}// 현재 주어진 위치에서부터, 두 문자열이 매칭되는지를 반환한다.// w_i 는 현재 w에서 matching 중인 글자의 index. (f_i도 f에서~)boolmatch(stringw,stringf,intw_i,intf_i){boolmatched=true;intwsize=w.size();intfsize=f.size();while(w_i<wsize&&f_i<fsize){if(w[w_i]=='?')// 1. 물음표일 때{w_i++;f_i++;}elseif(w[w_i]=='*')// 2. 별표일 때.{while((w_i<wsize)&&(w[w_i]=='*'))w_i++;vector<bool>cases;for(intk=f_i;k<fsize;k++){cases.push_back(match(w,f,w_i,k));}for(intk=0;k<cases.size();k++){if(cases[k])returntrue;}}elseif(w[w_i]!=f[f_i])// 3. 매칭이 안 될 때 -> 자동 False.{returnfalse;}else// 매칭될 때 -> 다음 글자를 찾는다.{w_i++;f_i++;}}if(w_i==wsize&&f_i==fsize)// 매칭이 된 경우.returntrue;elseif(w_i<wsize&&f_i==fsize)// fileName이 먼저 끝난 경우{for(inti=w_i;i<wsize;i++)// w의 남은 문자들이 모두 *이면 true, 아니면 false{if(w[w_i]!='*')returnfalse;}returntrue;}elseif(w_i==wsize&&f_i<fsize)// wildCard가 먼저 끝난 경우.{if(w[wsize-1]=='*')// w의 마지막 문자가 *이면 true, 아니면 false.returntrue;returnfalse;}returnfalse;}// 문자열을 정렬한다.voidsortString(stringv[],intn){for(inti=0;i<n;i++){for(intj=n-1;j>i;j--){if(v[j].compare(v[j-1])==-1){v[j].swap(v[j-1]);}}}}
11년 전
0개의 댓글이 있습니다.
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면
온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야
합니다. 현재 문제를 푸셨습니다.
Signin
안녕하세요~
WildCard 문제를 계속 풀다가,
오답이 계속 나서 여쭈어봅니다.
Memoization을 배우는 단원이지만
일단은 풀어보고 나서 메모이제이션을 적용시키려는 생각으로
아직은 일일이 계산만 하는 코드를 작성했습니다.
TLE가 나기를 바라면서 코드를 제출했는데
매번 오답 판정이 뜨네요ㅠㅠ.
혹시 무엇이 문제인지 알 수 있을까요~~?
알려주시면 감사하겠습니다~!
11년 전