π‘ 쑰건
μ μ μ μ°¨λ €λ³΄λ λ°λ₯μλ 격μ λͺ¨μμ νμΌμ΄ κ°λν μΈμμ΄μκ³ , κ° νμΌλ§λ€ μνλ²³ μλ¬Έμκ° νλμ© μ¨μλ€λλΌ. λλ €μμ κ°λν΄ λ―ΈμΉλ―μ΄ μλ§ λ³΄κ³ λ¬λ € λμ μ°Ύμ ν€λ§Έμ§λ§ μ΄ μΈμμ λμ΄ μμκ³ , λ¬λ¦¬λ€ μ§μ³ λ°λ₯μ λλ¬λμ°λ νλμ μ΄λ° λ¬Έκ΅¬κ° νλΉ κ΅¬λ¦μΌλ‘ λ λ€λκ³ μμλ€.
μ΄ μΈμμ Nν Mμ΄μ 격μλ‘ μκ²ΌμΌλ©°, κ° μΉΈμ μνλ²³μ΄ μ¨μκ³ ννμΌλ‘ μ΄μ΄μ§λ€. μΌμͺ½ μλ₯Ό (1, 1), μ€λ₯Έμͺ½ μλλ₯Ό (N, M)μ΄λΌκ³ νμ. λλ μ무 κ³³μμλ μμν΄μ μνμ’μ°λ λκ°μ λ°©ν₯μ μΉΈμΌλ‘ ν μΉΈμ© μ΄λν μ μλ€. μ΄ λ, μ΄λ―Έ μ§λ μλ μΉΈλ€μ λ€μ λ°©λ¬Ένλ κ²μ νμ©νλ€. μμνλ 격μμ μνλ²³μ μμμΌλ‘, μ΄λν λλ§λ€ κ° μΉΈμ μ¨μ§ μνλ²³μ μ΄μ΄ λΆμ¬μ λ¬Έμμ΄μ λ§λ€ μ μλ€. μ΄ κ³³μ μ μΈ λ΄κ° μ’μνλ λ¬Έμμ΄μ K κ° μλ €μ€ ν°μ΄λ, κ° λ¬Έμμ΄ λ§λ€ λκ° λ§λ€ μ μλ κ²½μ°μ μλ₯Ό μ λλ΅ν΄μΌ λμ μΈκ³λ‘ λμκ° κ²μ΄λ€. κ²½μ°μ μλ₯Ό μ
λ, λ°©λ¬Έ μμκ° λ€λ₯΄λ©΄ λ€λ₯Έ κ²½μ°μ΄λ€. μ¦, (1,1)->(1,2) λ‘ κ°λ κ²κ³Ό (1,2)->(1,1) μ κ°λ κ²μ μλ‘ λ€λ₯Έ κ²½μ°μ΄λ€.
λκ° 1νμμ μλ‘ κ°λ©΄ N νμΌλ‘ κ°κ² λλ©° λ°λλ κ°λ₯νλ€. λκ° 1μ΄μμ μΌμͺ½μΌλ‘ κ°λ©΄ M μ΄λ‘ κ°κ² λλ©° λ°λλ κ°λ₯νλ€. λκ°μ λ°©ν₯μ λν΄μλ λμΌν κ·μΉμ΄ μ μ©λλ€. νλμ μλμ κ°μ κ·Έλ¦Όμ ꡬλ¦μΌλ‘ κ·Έλ €μ€ ν°μ΄λ μ΄ν΄ν΄ λλλ‘ νμ¬λΌ. μλ₯Ό λ€μ΄μ, λκ° (1, 1)μμ μλ‘ κ°λ©΄ (N, 1)μ΄κ³ , μΌμͺ½μΌλ‘ κ°λ©΄ (1, M)μ΄λ©° μΌμͺ½ μ λκ°μ λ°©ν₯μΌλ‘ κ°λ©΄ (N, M)μΈ κ²μ΄λ€.
μΈμμ μ΄λ£¨λ 격μμ μ 보μ, K κ°μ λ¬Έμμ΄μ΄ μ£Όμ΄μ‘μ λ, νΈμμ΄κ° λλ΅ν΄μΌ νλ μ λ΅μ ꡬνλ λ¬Έμ .16κ° μ΄μμ λ°μ΄ν°λ₯Ό λ§μμΌ ACλ₯Ό λ°λλ€.
첫λ²μ§Έ μ€μ 격μμ ν¬κΈ° N, Mκ³Ό μ μ΄ μ’μνλ λ¬Έμμ΄μ κ°μ K κ° μ£Όμ΄μ§λ€. λ€μμ Nκ°μ μ€μ κ±Έμ³μ Mκ°μ μνλ²³ μλ¬Έμκ° κ³΅λ°±μμ΄ μ£Όμ΄μ§λ€. μ¬κΈ°μμ 첫 λ²μ§Έ μ€μ 1νμ μ 보μ΄λ©°, N λ²μ§Έ μ€μ Nνμ μ 보μ΄λ€. μ΄μ΄μ Kκ°μ μ€μ κ±Έμ³μ μ μ΄ μ’μνλ λ¬Έμμ΄μ΄ μ£Όμ΄μ§λ€. λͺ¨λ μνλ²³ μλ¬Έμλ‘ μ΄λ£¨μ΄μ Έ μλ€.
3 ≤ N, M ≤ 10, Nκ³Ό Mμ μμ°μμ΄λ€. 1 ≤ K ≤ 1,000, Kλ μμ°μμ΄λ€. 1 ≤ μ μ΄ μ’μνλ λ¬Έμμ΄μ κΈΈμ΄ ≤ 5 μ μ΄ μ’μνλ λ¬Έμμ΄μ μ€λ³΅λ μλ μλ€.
DFS, κΉμ΄ μ°μ νμ μ νμ λ¬Έμ
π₯ μμ€ μ½λ
from sys import stdin, setrecursionlimit
setrecursionlimit(10 ** 9)
n, m, k = map(int, stdin.readline().split())
ans, arr, res = {}, [], []
dx, dy = [1, 0, -1, 0, 1, 1, -1, -1], [0, 1, 0, -1, -1, 1, 1, -1]
ans_list = []
for i in range(n):
arr.append(list(stdin.readline().rstrip()))
for _ in range(k):
data = stdin.readline().rstrip()
ans[data] = 0
ans_list.append(data)
def solve(x, y, cnt, string):
if cnt > 5:
return
if string in ans:
ans[string] += 1
for i in range(8):
nx, ny = (x + n + dx[i]) % n, (y + m + dy[i]) % m
solve(nx, ny, cnt + 1, string + arr[nx][ny])
for i in range(n):
for j in range(m):
start = ''
solve(i, j, 1, start + arr[i][j])
for k in ans_list:
if k in ans:
print(ans[k])
π μμ λ° μ€νκ²°κ³Ό
μμ
3 4 3
abcb
bcaa
abac
aba
abc
cab
μ€νκ²°κ³Ό
56
0
β¨οΈ λ¬Έμ νμ΄
nκ°μ μ
λ ₯μ λ°μ arr 리μ€νΈμ μ μ₯νλ€.
kλ² λ°λ³΅νλ©΄μ μ μ΄ μ’μνλ λ¬Έμμ΄ μ μ
λ ₯ λ°μ ansμ ν€ κ°μΌλ‘ λκ³ , 0μΌλ‘ μ΄κΈ°ν νλ€. λν ans_list μ μ μ΄ μ’μνλ λ¬Έμμ΄μ μ μ₯νλ€.
n * m ν¬κΈ°μ 리μ€νΈλ₯Ό μννλ©΄μ κ° μ’νμ ν΄λΉνλ λ¬Έμλ‘λΆν° μμν΄ λ§μ½ λ¬Έμκ° ans μ μλ€λ©΄ + 1μ ν΄μ€λ€.
8λ°©ν₯μΌλ‘ λ»μ΄λκ°λ©΄μ μ¬κ·λ₯Ό ν΅ν΄ solve() νμλ₯Ό λ€μ νλ©΄μ cnt νλΌλ―Έν°κ° 5 μ΄μμ΄λ©΄ return νλ€.
n * m ν¬κΈ°μ 리μ€νΈλ₯Ό λͺ¨λ μννλ€λ©΄, ans_list λ₯Ό μννλ€.(k)
k κ° ans μ μλ€λ©΄, ans λμ
λ리μ k μ ν΄λΉνλ ν€ κ°μ valueλ₯Ό μΆλ ₯νλ©΄ λλ€.