if(O개수가 X개수보다 많으면) invalid
else if(X개수가 O개수보다 2개이상 많으면) invalid
else if (X빙고가 1개 이상이면서 O빙고도 1개 이상이면) invalid
else if (X빙고가 1개 이상이면서 X개수가 O개수보다 1개 많으면) valid // X승
else if (O빙고가 1개 이상이면서 X개수와 O개수가 같으면) valid // O승
else if (X빙고와 O빙고가 없고 X개수가 O개수보다 1개 많으면) valid // 무승부
else invalid
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String val = br.readLine();
if (val.equals("end")) {
break;
}
char[][] board = new char[3][3];
int cnt = 0;
int O_cnt = 0;
int X_cnt = 0;
int B_cnt = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = val.charAt(cnt++);
if (board[i][j] == 'O') {
O_cnt++;
} else if (board[i][j] == 'X') {
X_cnt++;
} else {
B_cnt++;
}
}
}
int XBingoCnt = bingo('X', board);
int OBingoCnt = bingo('O', board);
if (O_cnt > X_cnt) { // O는 X보다 많을 수 없습니다.
System.out.println("invalid");
} else if (X_cnt - O_cnt >= 2) { // X는 O와 같거나 1개 많을 수 있습니다.
System.out.println("invalid");
} else if (XBingoCnt >= 1 && OBingoCnt >= 1) { // X와 O가 동시에 빙고일 수 없습니다.
System.out.println("invalid");
} else if (XBingoCnt >= 1 && X_cnt - O_cnt == 1) { // X가 빙고인 상황
System.out.println("valid");
} else if (OBingoCnt >= 1 && X_cnt - O_cnt == 0) { // O가 빙고인 상황
System.out.println("valid");
} else if (XBingoCnt == 0 && OBingoCnt == 0 && B_cnt == 0 && X_cnt - O_cnt == 1) { // 무승부
System.out.println("valid");
} else { // 더 진행이 가능한데 안하는 상태
System.out.println("invalid");
}
}
}
static class pos {
int x;
int y;
public pos(int x, int y) {
super();
this.x = x;
this.y = y;
}
@Override
public String toString() {
return "pos [x=" + x + ", y=" + y + "]";
}
}
public static int bingo(char val, char[][] board) {
int bingoCnt = 0;
if (board[0][0] == val && board[0][1] == val && board[0][2] == val) {
bingoCnt++;
}
if (board[1][0] == val && board[1][1] == val && board[1][2] == val) {
bingoCnt++;
}
if (board[2][0] == val && board[2][1] == val && board[2][2] == val) {
bingoCnt++;
}
if (board[0][0] == val && board[1][0] == val && board[2][0] == val) {
bingoCnt++;
}
if (board[0][1] == val && board[1][1] == val && board[2][1] == val) {
bingoCnt++;
}
if (board[0][2] == val && board[1][2] == val && board[2][2] == val) {
bingoCnt++;
}
if (board[0][0] == val && board[1][1] == val && board[2][2] == val) {
bingoCnt++;
}
if (board[0][2] == val && board[1][1] == val && board[2][0] == val) {
bingoCnt++;
}
return bingoCnt;
}
}
XBingoCnt == 0 && OBingoCnt == 0
를 고려하지 않아서 틀렸었다.