알고스팟 WILDCARD 문제를 풀었다.
wildcard 문자열 패턴과 입력받은 문자열을 하나씩 비교했는데,
입력받을문자열을 끝까지 갔을경우 wildcard패턴이 남은 경우 패턴이 아니라고 생각하였다.
근데, 남은 패턴이 * 인 경우에는 위 조건에 위배된다.
때문에 이 케이스를 추가하니, AC를 받았다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include <iostream> #include <stdlib.h> #include <cstring> int T; char wildcard[101]; int N; char str[51][101]; int cmp(const void* a, const void* b){ return strcmp((char*)a, (char*)(b)); } bool check(char* ptr, char* pattern){ if(pattern[0] == 0 && ptr[0] == 0){ return true; } if(pattern[0] == 0 || ptr[0] == 0){ if(pattern[0] == '*'){ int i = 0; while(pattern[i] == '*') i++; if(pattern[i] == 0) return true; } return false; } if(pattern[0] == '?'){ if(check(ptr + 1, pattern + 1)){ return true; } } else if(pattern[0] == '*'){ int i = 0; for(; ptr[i]; i++){ if(check(ptr + i, pattern + 1)){ return true; } } if(check(ptr +i, pattern + 1)) return true; } else{ if(ptr[0] == pattern[0]){ if(check(ptr + 1, pattern + 1)) return true; } } return false; } int main(void) { scanf("%d", &T); scanf("%*c"); while(T--){ scanf("%s", wildcard); scanf("%d", &N); scanf("%*c"); for(int i = 0 ; i < N; i++){ scanf("%s", str[i]); } qsort(str, (unsigned int)N, sizeof(str[0]), cmp); for(int i = 0 ; i < N; i++){ if(check(str[i], wildcard)){ printf("%s\n", str[i]); } } } return 0; } | cs |
'알고리즘' 카테고리의 다른 글
백준(BOJ) 2920 (0) | 2018.11.25 |
---|---|
백준(BOJ) 2178 (0) | 2018.11.25 |
알고스팟(algospot) JLIS (0) | 2018.11.13 |
백준(BOJ) 11053 (0) | 2018.11.13 |
백준(BOJ) 3005번 (0) | 2018.11.09 |