로직은 그냥 BF로 했는데 코딩에서 뭐가 문젠지 자꾸 에러가 나네....
하루동안 코드 고치다가 포기 ㅠㅠ
import java.util.Scanner;
class Case {
int m;
int n;
char[][] grid;
int k;
String[] str;
int index;
/*int[][] direction= {{-1,-1}, {0,1}, {1,1},
{-1,-1}, {0,-1}, {1,-1},
{-1,0},
{1,0}};*/
int[] y = {-1, -1, -1, 0, 1, 1, 1, 0};
int[] x = {-1, 0, 1, 1, 1, 0, -1, -1};
int length;
Case(int m, int n, char[][] grid, int k, String[] str) {
this.m = m;
this.n = n;
this.grid = grid.clone();
this.k = k;
this.str = str.clone();
/*index = 0;*/
length = 1; //첫 단어
/*direction = new int[2][4];*/
}
void output() {
for(int i=0; i<str.length; i++) { //찾을 단어 개수만큼
index = 0; //다음 단어의 첫 글자
for(int row=0; row<m; row++) {
for(int col=0; col<n; col++) {
if(grid[row][col] == str[i].charAt(index)) { // 첫 단어가 맞으면
/*System.out.println(str[i].charAt(index));
System.out.println((row+1) + " " + (col+1));*/
System.out.println("444 : " + (row+1) + " " + (col+1) );
if(check(grid, row, col, str[i])) {
System.out.println();
System.out.println("check: " + (row+1) + " " + (col+1));
System.out.println();
}
length =1;
}
}
}
}
}
boolean check(char[][] grid, int row, int col, String str) {
int idx = 1;
int temp_r;
int temp_c;
int cnt = str.length();
for(int i=0; i<8; i++) { //각 방향에 대해서
idx =1;
temp_r = row;
temp_c = col;
length=1;
cnt = str.length();
System.out.println();
System.out.println(str);
System.out.println();
while(0 < cnt--) {
temp_r += y[i]; //방향이동
temp_c += x[i];
System.out.println("111 "+ temp_r + " " + temp_c);
if(temp_r >= 0 && temp_r < m && temp_c >=0 && temp_c <n) {
System.out.println("222");
System.out.println("idx = " + idx);
if(grid[temp_r][temp_c] == str.charAt(idx)) {
System.out.println("333");
length++;
idx++;
}
}
}
if(length == str.length()) return true;
}
return false;
}
}
public class Waldorf {
public static void main(String ar[]) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int m;
int n;
char[][] grid;
int k;
String[] str;
// System.out.println(num); /////////
Case[] caseArr = new Case[num];
for(int i=0; i<caseArr.length; i++) {
m = sc.nextInt();
n = sc.nextInt();
// System.out.println(m); /////////
// System.out.println(n); /////////
sc.nextLine();
grid = new char[m][n];
for(int row=0; row<m; row++) {
grid[row] = sc.nextLine().toLowerCase().toCharArray().clone();
// System.out.println(grid[row]);
}
/*for(int a=0; a<m; a++) {
for(int b=0; b<n; b++) {
System.out.print(grid[a][b]);
}
System.out.println();
}*/
k = sc.nextInt();
// System.out.println(k);
str = new String[k];
sc.nextLine();
for(int j=0; j<k; j++)
str[j] = sc.nextLine().toLowerCase();
caseArr[i] = new Case(m, n, grid, k, str);
caseArr[i].output();
}
}
}