์์ผ๋์นด๋๋ ๋ค์ํ ์ด์์ฒด์ ์์ ํ์ผ ์ด๋ฆ์ ์ผ๋ถ๋ง์ผ๋ก ํ์ผ ์ด๋ฆ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์์ผ๋์นด๋ ๋ฌธ์์ด์ ์ผ๋ฐ์ ์ธ ํ์ผ๋ช ๊ณผ ๊ฐ์ง๋ง, ๋ ? ์ ๊ฐ์ ํน์ ๋ฌธ์๋ฅผ ํฌํจํ๋ค.
์์ผ๋์นด๋ ๋ฌธ์์ด์ ์์์ ํ ๊ธ์์ฉ ํ์ผ๋ช ๊ณผ ๋น๊ตํด์, ๋ชจ๋ ๊ธ์๊ฐ ์ผ์นํ์ ๋ ํด๋น ์์ผ๋์นด๋ ๋ฌธ์์ด์ด ํ์ผ๋ช ๊ณผ ๋งค์น๋๋ค๊ณ ํ์. ๋จ, ์์ผ๋์นด๋ ๋ฌธ์์ด์ ํฌํจ๋ ? ๋ ์ด๋ค ๊ธ์์ ๋น๊ตํด๋ ์ผ์นํ๋ค๊ณ ๊ฐ์ ํ๋ฉฐ, ๋ 0 ๊ธ์ ์ด์์ ์ด๋ค ๋ฌธ์์ด์๋ ์ผ์นํ๋ค๊ณ ๋ณธ๋ค.
์๋ฅผ ๋ค์ด ์์ผ๋ ์นด๋ he?p ๋ ํ์ผ๋ช help ์๋, heap ์๋ ๋งค์น๋์ง๋ง, helpp ์๋ ๋งค์น๋์ง ์๋๋ค. ์์ผ๋ ์นด๋ p ๋ ํ์ผ๋ช help ์๋, papa ์๋ ๋งค์น๋์ง๋ง, hello ์๋ ๋งค์น๋์ง ์๋๋ค.
์์ผ๋์นด๋ ๋ฌธ์์ด๊ณผ ํจ๊ป ํ์ผ๋ช ์ ์งํฉ์ด ์ฃผ์ด์ง ๋, ๊ทธ ์ค ๋งค์น๋๋ ํ์ผ๋ช ๋ค์ ์ฐพ์๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ ๋ ฅ์ ์ฒซ ์ค์๋ ํ ์คํธ ์ผ์ด์ค์ ์ C (1 <= C <= 10) ๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ ์ค์๋ ์์ผ๋์นด๋ ๋ฌธ์์ด W ๊ฐ ์ฃผ์ด์ง๋ฉฐ, ๊ทธ ๋ค์ ์ค์๋ ํ์ผ๋ช ์ ์ N (1 <= N <= 50) ์ด ์ฃผ์ด์ง๋ค. ๊ทธ ํ N ์ค์ ํ๋์ฉ ๊ฐ ํ์ผ๋ช ์ด ์ฃผ์ด์ง๋ค. ํ์ผ๋ช ์ ๊ณต๋ฐฑ ์์ด ์ํ๋ฒณ ๋์๋ฌธ์์ ์ซ์๋ง์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์์ผ๋์นด๋๋ ๊ทธ ์ธ์ * ์ ? ๋ฅผ ๊ฐ์ง ์ ์๋ค. ๋ชจ๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ 1 ์ด์ 100 ์ดํ์ด๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ง๋ค ์ฃผ์ด์ง ์์ผ๋์นด๋์ ๋งค์น๋๋ ํ์ผ๋ค์ ์ด๋ฆ์ ํ ์ค์ ํ๋์ฉ ์์คํค ์ฝ๋ ์์(์ซ์, ๋๋ฌธ์, ์๋ฌธ์ ์)๋๋ก ์ถ๋ ฅํ๋ค.
๊ฐ์ ๋ฌธ์์ด ๋น๊ตํด์ *, ?์ ์๋ง์ ๋ฌธ์๊ฐ ์์ผ๋ฉด ๋งค์น ์ฑ๊ณต
๋ฉ๋ชจ์ด์ ์ด์
: ์ ์ฅํด๋๊ณ ์ฌ์ฉํ๊ธฐ (์ค๋ณต ์ฐ์ฐ ๊ฐ์)
๋ฌธ์์ด ๋์ ์ฌ๋ถ
1) ๋ฉ๋ชจ์ด์ ์ด์
int ret = cache[w][s];
if(ret != -1) return ret;
2) ๋ฌธ์์ด ๋์ ์ฌ๋ถ
if(s < S.length() && w < W.length() && (W.charAt(w) == '?' || W.charAt(w) == S.charAt(s)))
return ret = match(w+1,s+1);
if(w == W.length()) return ret = (s == S.length()) ? 1:0;
if(W.charAt(w) == '*') {
if(match(w+1, s) == 1 || (s < S.length() && match(w,s+1) == 1))
return ret = 1;
}
import java.util.*;
public class DP_EX_2 {
static int cache[][] = new int[101][101];
static String W,S;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int tc = sc.nextInt();
while(tc > 0) {
W = sc.next();
int n = sc.nextInt();
ArrayList<String> ret = new ArrayList<String>();
for(int[] arr: cache)
Arrays.fill(arr, -1);
for(int i=0; i<n; i++) {
S = sc.next();
if(match(0,0) == 1)
ret.add(new String(S));
}
Collections.sort(ret);
for(int i=0; i<ret.size(); i++)
System.out.println(ret.get(i));
}
}
static int match(int w, int s) {
int ret = cache[w][s];
if(ret != -1) return ret;
if(s < S.length() && w < W.length() && (W.charAt(w) == '?' || W.charAt(w) == S.charAt(s)))
return ret = match(w+1,s+1);
if(w == W.length()) return ret = (s == S.length()) ? 1:0;
if(W.charAt(w) == '*') {
if(match(w+1, s) == 1 || (s < S.length() && match(w,s+1) == 1))
return ret = 1;
}
return ret = 0;
}
}
...๋ฐํ์ ์๋ฌ..๋จ ๋จธ ํ๋ฆฐ์ง๋ฅผ ๋ชจ๋ฅด๊ฒ ์..!