๐ ๋ฌธ์
ํ์ง์ด๋ ์ง์์ ์ทจ๋ฏธ๋ก ์ด์ ์ฒด์ ๋ฅผ ๋ง๋ค๊ณ ์๋ค. ์ค๋์ ๋๋ ํ ๋ฆฌ ์์ ํ์ผ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ฃผ๋ "ls"๋ฅผ ๊ตฌํํด์ผ ํ ์ฐจ๋ก์ด๋ค. ํ์ง์ด๋ ์ฌ์ฉ์๋ค์ด ์์ผ๋์นด๋(*)๋ฅผ ์ด์ฉํด์ ํจํด๊ณผ ์ผ์นํ ํ์ผ ์ด๋ฆ์ ๋ณด์ฌ์ฃผ๊ฒ ํ๋ ค๊ณ ํ๋ค. ์์ผ๋ ์นด๋๋ ์ด๋ค ๋ฌธ์์ 0๊ฐ ๋๋ ๊ทธ ์ด์์ ํด๋นํ๋ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ ํจํด P๊ฐ ์ฃผ์ด์ง๋ค. P๋ 1๊ธ์~100๊ธ์์ด๊ณ , ์ํ๋ฒณ ์๋ฌธ์์ '.', '*'๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค. ๋์งธ ์ค์๋ ๋๋ ํ ๋ฆฌ์ ํ์ผ ๊ฐ์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 100) ๋ค์ N๊ฐ์ ์ค์๋ ๋๋ ํ ๋ฆฌ์ ์๋ ํ์ผ์ ์ด๋ฆ์ด ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ํ์ผ์ ์ด๋ฆ์ 1๊ธ์~100๊ธ์์ด๊ณ , ์ํ๋ฒณ ์๋ฌธ์์ '.'์ผ๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค.
๐์ถ๋ ฅ
ํจํด P์ ์ผ์นํ๋ ํ์ผ์ ์ด๋ฆ์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์์๋ฅผ ๋ฐ๋ผ์ ํ ์ค์ ํ๋์ฉ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ํ์ด
์ฌ๋ฏธ์๋ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ๋ฌธ์ ์๋ค. dp[i][j]๊ฐ ์๋ฏธํ๋ ๊ฒ์ ํจํด๋ฌธ์[i]์ ํ์ผ๋ฌธ์[j] ๊น์ง์ ๋งค์น์ฌ๋ถ์ด๋ค.
dp[i][j] ๊ฐ -1 ์ด๋ฉด ์์ง ๊ณ์ฐ๋์ง ์์ ๊ฒ์ด๊ณ , dp[i][j] = 0 ์ด๋ฉด ๋งค์นญ๋์ง ์์์ ์๋ฏธํ๊ณ , dp[i][j] = 1 ์ด๋ฉด ๋งค์นญ๋จ์ ์๋ฏธํ๋ค.
ํจํด๋ฌธ์์ ํ์ผ๋ฌธ์๊ฐ ๋์ผํ ๋๊น์ง i์ j ๋ฅผ ํ๋์ฉ ์ฆ๊ฐ์ํจ๋ค.
1 2 3 4 | if p_idx < p.len() && s_idx < s.len() && p.as_bytes()[p_idx] == s.as_bytes()[s_idx] { dp[p_idx][s_idx] = solve(dp, p, s, p_idx + 1, s_idx + 1); return dp[p_idx][s_idx]; } | cs |
๊ทธ๋ฌ๋ค ๋ง์ฝ ํจํด๋ฌธ์ ๋๊น์ง ๋๋ฌํ์ ๋, ํ์ผ๋ฌธ์๋ ๋๊น์ง ๋๋ฌํ๋ค๋ฉด dp[i][j] = 1์ด๋๊ณ , ํ์ผ๋ฌธ์๊ฐ ์์ง ๋๋์ง ์์๋ค๋ฉด dp[i][j] = 0์ด ๋๋ค.
1 2 3 4 | if p_idx == p.len() { dp[p_idx][s_idx] = if s_idx == s.len() { 1 } else { 0 }; return dp[p_idx][s_idx]; } | cs |
๊ทธ๋ฆฌ๊ณ ์ด์ ํต์ฌ์ธ๋ฐ, ๋ง์ฝ ํจํด๋ฌธ์๊ฐ * ๋ผ๋ฉด ๋๊ฐ์ง๋ฅผ ์๋ํด๋ณด์์ผ ํ๋ค. ํ๋๋ *๊ฐ ๋น ๋ฌธ์์ด์ด ๋๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ํ๋๋ *๊ฐ ํ์ฌ ๋ฌธ์๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ๋ค.
*๊ฐ ๋น๋ฌธ์์ด์ผ๋, ๋งค์นญ๋๋์ง ํ์ธํ๋ ค๋ฉด i์ ์ธ๋ฑ์ค๋ง ํ๋ ์ฆ๊ฐ์์ผ์ ์ฌ๊ท๋ฅผ ํตํด ํ์ธํ ์ ์๊ณ , *๊ฐ ํ์ฌ ๋ฌธ์๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ๋ j์ ์ธ๋ฑ์ค๋ฅผ ์ฆ๊ฐ์์ผ ์ฌ๊ท๋ฅผ ํตํด ํ์ธํ ์ ์๋ค.
1 2 3 4 5 6 | if p.as_bytes()[p_idx] == b'*' { if solve(dp, p, s, p_idx + 1, s_idx) == 1 || (s_idx < s.len() && solve(dp, p, s, p_idx, s_idx + 1) == 1) { dp[p_idx][s_idx] = 1; return dp[p_idx][s_idx]; } } | cs |
์๊ฐ๋ณต์ก๋๋ $O(n^2)$ ์ด ๋๋ค.
๐ป ์ฝ๋
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 | use std::io::{self, BufRead}; fn solve(dp: &mut Vec<Vec<i8>>, p: &str, s: &str, p_idx: usize, s_idx: usize) -> i8 { if dp[p_idx][s_idx] != -1 { return dp[p_idx][s_idx]; } if p_idx < p.len() && s_idx < s.len() && p.as_bytes()[p_idx] == s.as_bytes()[s_idx] { dp[p_idx][s_idx] = solve(dp, p, s, p_idx + 1, s_idx + 1); return dp[p_idx][s_idx]; } if p_idx == p.len() { dp[p_idx][s_idx] = if s_idx == s.len() { 1 } else { 0 }; return dp[p_idx][s_idx]; } if p.as_bytes()[p_idx] == b'*' { if solve(dp, p, s, p_idx + 1, s_idx) == 1 || (s_idx < s.len() && solve(dp, p, s, p_idx, s_idx + 1) == 1) { dp[p_idx][s_idx] = 1; return dp[p_idx][s_idx]; } } dp[p_idx][s_idx] = 0; dp[p_idx][s_idx] } fn main() { let stdin = io::stdin(); let mut input = stdin.lock().lines(); let p = input.next().unwrap().unwrap(); let n: usize = input.next().unwrap().unwrap().parse().unwrap(); let m = 100; let mut res = Vec::new(); for _ in 0..n { let mut dp = vec![vec![-1; m + 1]; m + 1]; let s = input.next().unwrap().unwrap(); if solve(&mut dp, &p, &s, 0, 0) == 1 { res.push(s); } } for r in res { println!("{}", r); } } | cs |
color scipter์์ rust ํฌ๋งท์ ์ ๊ณตํด์ฃผ์ง ์์์ ๋ค๋ฅธ ๊ฑธ ์ฐพ์๋ด์ผ ๊ฒ ๋ค...ใ
์ฌ๋ด์ผ๋ก ํ์ด์ฌ์์๋ fnmatch๋ผ๋ ๊ฐ์ฉ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํด์ฃผ๊ธฐ๋ ํ๋ค,,,
1 2 3 4 5 6 7 8 9 10 11 | import sys, fnmatch input = sys.stdin.readline p = input().rstrip() n = int(input()) res = [] for _ in range(n): s = input().rstrip() if fnmatch.fnmatch(s, p): res.append(s) print(*res,sep='\n') | cs |
๋คํ์ด(?) dp ์ฌ์ฉํด์ ์ง์ ๊ตฌํํ๋ ๊ฒ๋ณด๋ค๋ ๋๋ฆฌ๋ค.
๐ญ ์ํ์ฐฉ์ค
๐ ๋ฌธ์ ๋งํฌ
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 15944๋ฒ: ์ฑ๊ณต (0) | 2024.11.07 |
---|---|
[๋ฐฑ์ค] 28357๋ฒ: ์ฌํ ๋๋ ์ฃผ๊ธฐ (1) | 2023.10.08 |
[๋ฐฑ์ค] 5942๋ฒ: Big Macs Around the World (0) | 2023.09.18 |
[๋ฐฑ์ค] 20560๋ฒ: ๋ง์ง ํ๋ฐฉ (1) | 2023.09.01 |
[๋ฐฑ์ค] 1185: ์ ๋ฝ ์ฌํ (0) | 2023.08.24 |