짬뽕얼큰하게의 맨땅에 헤딩 :: 알고스팟(algospot) WILDCARD

알고스팟 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] == 0return 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
블로그 이미지

짬뽕얼큰하게

,