오목에서 이긴 사람을 찾고, 이긴 결과의 시작점이 되는 바둑의 위치를 찾는 문제입니다!
왼쪽 위부터 내려오면서 탐색을 한다고 하면 "오른쪽, 아래, 오른쪽 위 대각선, 오른쪽 아래 대각선" 이렇게 4가지 방향으로 검사를 할 수 있습니다.
4가지 방향으로 검사를 해서 5개가 완성되는 것을 찾으면 끝!
import java.io.*;
import java.util.*;
public class Main {
// 배열을 사용하면 인덱스 시작이 0이므로 1부터 시작하기 위해 맨앞과 맨뒤에 하나씩 공간 추가
static int[][] map = new int[21][21];
static int[][][] memo = new int[21][21][4];
static int[] dx = { 1, 1, 0, -1 };
static int[] dy = { 0, 1, 1, 1 };
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
for(int i=1; i<=19; i++) {
st = new StringTokenizer(br.readLine());
for(int j=1; j<=19; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
System.out.println(findFive());
}
private static String findFive() {
for (int j = 1; j <= 19; j++) {
for (int i = 1; i <= 19; i++) {
if (map[i][j] != 0) {
for (int d = 0; d < 4; d++) {
if (memo[i][j][d] == 0 && calc(i, j, d, map[i][j]) == 5) {
return map[i][j] + "\n" + i + " " + j + "\n";
}
}
}
}
}
return "0";
}
private static int calc(int x, int y, int dir, int color) {
int nx = x + dx[dir];
int ny = y + dy[dir];
if (map[nx][ny] == color) {
return memo[nx][ny][dir] = calc(nx, ny, dir, color) + 1;
}
return 1;
}
}