이 질문은 정답의 소스코드를 포함한 스포일러가 포함되어 있습니다. 이미 푸신분이거나, 너무 간단하서 풀 필요도 없다고 생각하셨던 분들에 한해 봐주세요^^;
문제를 풀고나서 (4ms 속도로 품) 문제 구분을 보니, 동적계획법이라고 나와있나요?
그냥 Recursive하게 메모이제이션도 없이 풀었는데, 동적계획법이 나은 이유가 있나요?
아니면, 제가 짠게 동적계획법으로 분류되는건가요?? (그럴리가..)
질문의 요지 : 제 답과 동적계획법의 시간복잡도 차이는 어떻게 되는가?
혹시 모르니, 소스 남겨봅니다. (C)
#include<stdio.h>#include<string.h>charquery[101],files[50][101];intn;// 아래 함수는 재귀적으로 호출합니다.intmatch(intindex,intfs,intff,intqs,intqf){inti;if(qf-qs==0&&ff-fs==0)return1;if(qf-qs==0){return0;}if(ff-fs==0&&query[qs]=='*'){returnmatch(index,fs,ff,qs+1,qf);}switch(query[qs]){case'*':for(i=fs;i<=ff;i++){if(match(index,i,ff,qs+1,qf))return1;}return0;break;case'?':if(match(index,fs+1,ff,qs+1,qf))return1;elsereturn0;break;default:if(query[qs]==files[index][fs]&&match(index,fs+1,ff,qs+1,qf))return1;elsereturn0;}}intmain(){inti,j,t,n,c,ql,fl,result;charsortedIndex[50];// 나중에 찾은 답을 정렬하기 위한 인덱스 배열scanf("%d",&t);while(t-->0){scanf("%s",query);ql=strlen(query);scanf("%d",&n);result=0;for(i=0;i<n;i++){scanf("%s",files[i]);fl=strlen(files[i]);if(match(i,0,fl,0,ql)){sortedIndex[result++]=i;// 답을 다 찾고 정렬하는 것 보다, insertion sort로 하나씩 추가하며 정렬하는게 더 빠를거라 판단해서 아래는 정렬임(실제로 내용을 바꿔서 정렬하지는 않고, index만 가지고 순서만 바꿈)for(j=result-1;j>0;j--){if(strcmp(files[sortedIndex[j]],files[sortedIndex[j-1]])<0){c=sortedIndex[j];sortedIndex[j]=sortedIndex[j-1];sortedIndex[j-1]=c;}else{break;}}}}for(i=0;i<result;i++){printf("%s\n",files[sortedIndex[i]]);}}}
7년 전
0개의 댓글이 있습니다.
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면
온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야
합니다. 현재 문제를 푸셨습니다.
keith
WILDCARD
이 질문은 정답의 소스코드를 포함한 스포일러가 포함되어 있습니다. 이미 푸신분이거나, 너무 간단하서 풀 필요도 없다고 생각하셨던 분들에 한해 봐주세요^^;
문제를 풀고나서 (4ms 속도로 품) 문제 구분을 보니, 동적계획법이라고 나와있나요?
그냥 Recursive하게 메모이제이션도 없이 풀었는데, 동적계획법이 나은 이유가 있나요?
아니면, 제가 짠게 동적계획법으로 분류되는건가요?? (그럴리가..)
질문의 요지 : 제 답과 동적계획법의 시간복잡도 차이는 어떻게 되는가?
혹시 모르니, 소스 남겨봅니다. (C)
7년 전