백준 20166: 문자열 지옥에 빠진 호석(java)

Wuchang·2023년 7월 19일
0

백준

목록 보기
5/27

https://www.acmicpc.net/problem/20166



package Baekjoon.boj20166;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;

public class Main {
    static int N, M, K;
    static char[][] graph;
    static HashMap<String, Integer> map = new HashMap<>();
    static int[] dx = {-1,1,0,0,-1,-1,1,1};
    static int[] dy = {0,0,-1,1,-1,1,-1,1};
    static String[] list;

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        K = Integer.parseInt(st.nextToken());

        graph = new char[N+1][M+1];
        list = new String[K + 1];

        for (int i = 1; i <= N; i++) {
            String tmp = br.readLine();
            for (int j = 1; j <= M; j++) {
                graph[i][j] = tmp.charAt(j-1);
            }
        }

        for (int i = 1; i <= K; i++) {
            String str = br.readLine();
            list[i] = str;
            map.put(str, 0);
        }

        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= M; j++) {
                String s = "";
                s += graph[i][j];
                dfs(i, j, 1, s);
            }
        }
        StringBuilder sb = new StringBuilder();

        for (int i = 1; i <= K; i++) {
            sb.append(map.get(list[i])).append("\n");
        }
        System.out.println(sb.toString());
    }

    static void dfs(int x, int y, int count, String s) {

        if (map.containsKey(s)) {
            map.put(s, map.get(s) + 1);
        }
        if (count < 5) {
            for (int i = 0; i < 8; i++) {
                int X = x + dx[i];
                int Y = y + dy[i];

                if (X > N) X = 1;
                if (Y > M) Y = 1;
                if (X == 0) X = N;
                if (Y == 0) Y = M;
                dfs(X, Y, count + 1, s + graph[X][Y]);
            }
        }
    }
}
profile
우창의 개발일지🐈

0개의 댓글