๋ฌธ์
ํ์ด
1๏ธโฃ ๋ฐฑํธ๋ํน๊ณผ map์ ์ด์ฉํ ํ์ด
์ด ๋ฌธ์ ๋ ๋ฐฑํธ๋ํน๊ณผ ํด์๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ค.
๋ฐฑํธ๋ํน์ ํตํด์ ๋ง๋ค ์ ์๋ ๋ฌธ์์ด์ ์กฐํฉ๋ณ ๊ฐ์๋ฅผ ๊ธฐ๋กํ์๋๋ฐ,
๊ฒฝ๋ก๊ฐ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ๊ฒฝ์ฐ์ ์๋ก ์น๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐฑํธ๋ํน์ map์ ๊ฐ ํฌ์ธํธ์์ ์์ํ๋๋ก ์ค์ ํ์๊ณ ํ์ถ ์กฐ๊ฑด์ ์ค์ ํ ๊ธธ์ด์ ๋๋ฌํ์ ๋ ๊ธฐ๋กํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
์๋ํ๋ฉด, ์๋ฅผ ๋ค์ด (1,1) ์์ ์์ํด์ ๊ธธ์ด๊ฐ 2๋ฅผ ๋ง์กฑํ ๋์ ๊ฒฝ์ฐ์ ์๋ ๋ค๋ฅธ ํฌ์ธํธ์์ ์์ํ ๊ธธ์ด๊ฐ 2์ธ ๊ฒฝ์ฐ์ ์ ๋ ์ค๋ณต์ด ๋ฐ์ํ์ง ์์ ๊ฒ์ด๋ผ ํ๋จํ๊ธฐ ๋๋ฌธ์ด๋ค.
import java.io.*;
import java.util.*;
public class Main {
static int N;
static int M;
static int K;
static String[][] map;
static int[] dr = {1, 1, 1, 0, 0, -1, -1, -1};
static int[] dc = {1, 0, -1, 1, -1, -1, 0, 1};
static HashMap<String, Integer> hashMap = new HashMap<>();
static Stack<String> s = new Stack<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
setUp(br);
getCntOfCombination();
getAnswer(br);
}
private static void setUp(BufferedReader br) throws IOException {
int[] input = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::valueOf).toArray();
N = input[0];
M = input[1];
K = input[2];
map = new String[N][M];
for (int r = 0; r < N; r++) {
String[] info = br.readLine().split("");
for (int c = 0; c < M; c++) {
map[r][c] = info[c];
}
}
}
private static void getCntOfCombination() {
for (int r = 0; r < N; r++) {
for (int c = 0; c < M; c++) {
for (int length = 1; length <= 5; length++) {
s.push(map[r][c]);
bt(r, c, length);
s.clear();
}
}
}
}
private static void bt(int r, int c, int length) {
if (s.size() == length) {
String result = convertStackToString();
hashMap.put(result, hashMap.getOrDefault(result, 0) + 1);
return;
}
for (int i = 0; i < 8; i++) {
int nr = (dr[i] + r + N) % N, nc = (dc[i] + c + M) % M;
s.push(map[nr][nc]);
bt(nr, nc, length);
s.pop();
}
}
private static String convertStackToString() {
StringBuilder sb = new StringBuilder();
for (String str : s) {
sb.append(str);
}
return sb.toString();
}
private static void getAnswer(BufferedReader br) throws IOException {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < K; i++) {
sb.append(hashMap.getOrDefault(br.readLine(), 0) + "\n");
}
System.out.println(sb);
}
}
๊ฒฐ๊ณผ
๋ฐฑํธ๋ํน์ ์ ๊ตฌํํ ์ ์๋ค๋ฉด ํฌ๊ฒ ์ด๋ ต์ง ์์ ๋ฌธ์ ์๋ค.