[Algorithm] ๐Ÿ…WildCard

HaJingJingยท2021๋…„ 4์›” 22์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
10/119

0. ๋ฌธ์ œ

์™€์ผ๋“œ์นด๋“œ๋Š” ๋‹ค์–‘ํ•œ ์šด์˜์ฒด์ œ์—์„œ ํŒŒ์ผ ์ด๋ฆ„์˜ ์ผ๋ถ€๋งŒ์œผ๋กœ ํŒŒ์ผ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž์—ด์€ ์ผ๋ฐ˜์ ์ธ ํŒŒ์ผ๋ช…๊ณผ ๊ฐ™์ง€๋งŒ, ๋‚˜ ? ์™€ ๊ฐ™์€ ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ํฌํ•จํ•œ๋‹ค.
์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž์—ด์„ ์•ž์—์„œ ํ•œ ๊ธ€์ž์”ฉ ํŒŒ์ผ๋ช…๊ณผ ๋น„๊ตํ•ด์„œ, ๋ชจ๋“  ๊ธ€์ž๊ฐ€ ์ผ์น˜ํ–ˆ์„ ๋•Œ ํ•ด๋‹น ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž์—ด์ด ํŒŒ์ผ๋ช…๊ณผ ๋งค์น˜๋œ๋‹ค๊ณ  ํ•˜์ž. ๋‹จ, ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž์—ด์— ํฌํ•จ๋œ ? ๋Š” ์–ด๋–ค ๊ธ€์ž์™€ ๋น„๊ตํ•ด๋„ ์ผ์น˜ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉฐ,
๋Š” 0 ๊ธ€์ž ์ด์ƒ์˜ ์–ด๋–ค ๋ฌธ์ž์—ด์—๋„ ์ผ์น˜ํ•œ๋‹ค๊ณ  ๋ณธ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ์™€์ผ๋“œ ์นด๋“œ he?p ๋Š” ํŒŒ์ผ๋ช… help ์—๋„, heap ์—๋„ ๋งค์น˜๋˜์ง€๋งŒ, helpp ์—๋Š” ๋งค์น˜๋˜์ง€ ์•Š๋Š”๋‹ค. ์™€์ผ๋“œ ์นด๋“œ p ๋Š” ํŒŒ์ผ๋ช… help ์—๋„, papa ์—๋„ ๋งค์น˜๋˜์ง€๋งŒ, hello ์—๋Š” ๋งค์น˜๋˜์ง€ ์•Š๋Š”๋‹ค.
์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž์—ด๊ณผ ํ•จ๊ป˜ ํŒŒ์ผ๋ช…์˜ ์ง‘ํ•ฉ์ด ์ฃผ์–ด์งˆ ๋•Œ, ๊ทธ ์ค‘ ๋งค์น˜๋˜๋Š” ํŒŒ์ผ๋ช…๋“ค์„ ์ฐพ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ
์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ˆ˜ C (1 <= C <= 10) ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ ์ค„์—๋Š” ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž์—ด W ๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ๊ทธ ๋‹ค์Œ ์ค„์—๋Š” ํŒŒ์ผ๋ช…์˜ ์ˆ˜ N (1 <= N <= 50) ์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ํ›„ N ์ค„์— ํ•˜๋‚˜์”ฉ ๊ฐ ํŒŒ์ผ๋ช…์ด ์ฃผ์–ด์ง„๋‹ค. ํŒŒ์ผ๋ช…์€ ๊ณต๋ฐฑ ์—†์ด ์•ŒํŒŒ๋ฒณ ๋Œ€์†Œ๋ฌธ์ž์™€ ์ˆซ์ž๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์™€์ผ๋“œ์นด๋“œ๋Š” ๊ทธ ์™ธ์— * ์™€ ? ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 100 ์ดํ•˜์ด๋‹ค.

์ถœ๋ ฅ
๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ์ฃผ์–ด์ง„ ์™€์ผ๋“œ์นด๋“œ์— ๋งค์น˜๋˜๋Š” ํŒŒ์ผ๋“ค์˜ ์ด๋ฆ„์„ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์•„์Šคํ‚ค ์ฝ”๋“œ ์ˆœ์„œ(์ˆซ์ž, ๋Œ€๋ฌธ์ž, ์†Œ๋ฌธ์ž ์ˆœ)๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

1. ๋ฌธ์ œ ๊ฐ„๋‹จ ํ•ด์„

๊ฐ์ž ๋ฌธ์ž์—ด ๋น„๊ตํ•ด์„œ *, ?์— ์•Œ๋งž์€ ๋ฌธ์ž๊ฐ€ ์žˆ์œผ๋ฉด ๋งค์น˜ ์„ฑ๊ณต

2. ์•„์ด๋””์–ด

๋ฉ”๋ชจ์ด์ œ์ด์…˜ : ์ €์žฅํ•ด๋†“๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ (์ค‘๋ณต ์—ฐ์‚ฐ ๊ฐ์†Œ)
๋ฌธ์ž์—ด ๋Œ€์‘ ์—ฌ๋ถ€

3. ํ•ต์‹ฌ ํ’€์ด

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;
}

4. ์ฝ”๋“œ

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;
	}

}

5. ๊ฒฐ๊ณผ

...๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ..๋‚จ ๋จธ ํ‹€๋ฆฐ์ง€๋ฅผ ๋ชจ๋ฅด๊ฒ ์Œ..!

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€