오목인 바둑알 색깔을 찾으면 된다. 무승부 없고, 한 색깔이 여러번 오목인 것도 없다.
주의할 점은 육목 안됨 & 인덱스
y=x 방향, y=0 방향, y=-x방향, x=0 방향으로 오목인지 탐색하면 된다.
인덱스를 정말 ! 주의해야 한다 !!
(인덱스 잘못 설정해서 백준 채점이 자꾸 틀렸다고 떴다. 정올으로 넘어가서 채점하니까 어떤 테스트케이스에서 틀렸는지 알려준 덕분에 쉽게 찾을 수 있었다.)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int[] dx = {1,1,1,0};
static int[] dy = {-1,0,1,1};
public static void main(String[] args) throws IOException {
char[][] baduk = new char[19][19];
//입력받기
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 19; i++) {
baduk[i] = br.readLine().replace(" ", "").toCharArray();
}
int win = 0;
ite : for (int i = 0; i < 19; i++) {
for (int j = 0; j < 19; j++) {
if(baduk[i][j] == '0') continue;
for(int k = 0; k < 4; k++) { //4방 탐색
int count = 0;
for(int b=0;b<5;b++) { //오목 체크
int X = i + dy[k]*b;
int Y = j + dx[k]*b;
if(X < 0 || Y < 0 || X >=19 || Y >=19) break; //인덱스 넘어가면 break
if(baduk[i][j] != baduk[X][Y]) break; //색깔 다르면 break
count++;
if(count == 5) { //오목이면
X = i - dy[k]; //육목인지 체크
Y = j - dx[k];
if(X >= 0 && Y >= 0 && X < 19 && Y < 19) {
if(baduk[i][j] == baduk[X][Y]) break;
}
X = i + dy[k]*5; //육목인지 체크
Y = j + dx[k]*5;
if(X >= 0 && Y >= 0 && X < 19 && Y < 19) {
if(baduk[i][j] == baduk[X][Y]) break;
}
win = baduk[i][j] - '0'; //육목 아니면 print 후 종료
System.out.println(win);
System.out.println((i+1) + " " + (j+1));
break ite;
}
}
}
}
}
if(win == 0) System.out.println(win);
br.close();
}
}