간단한 구현 문제
#include <string>
#include <vector>
using namespace std;
int solution(vector<string> board) {
int answer = -1;
int cntO = 0;
int cntX = 0;
for (int i=0;i<3;i++) {
for (int j=0;j<3;j++) {
if (board[i][j] == 'O')
cntO++;
if (board[i][j] == 'X')
cntX++;
}
}
// Case 1. X가 O 보다 많으면 비정상
if (cntX > cntO)
return 0;
// Case 2. X와 O가 같은데, O가 이미 이긴 경우면 비정상, 아니면 정상
if (cntX == cntO) {
int winO[3] = { 0, 0, 0 };
for (int i=0;i<3;i++) {
if (board[i][0] == 'O' && board[i][1] == 'O' && board[i][2] == 'O')
winO[0] = 1;
if (board[0][i] == 'O' && board[1][i] == 'O' && board[2][i] == 'O')
winO[1] = 1;
}
if (board[0][0] == 'O' && board[1][1] == 'O' && board[2][2] == 'O')
winO[2] = 1;
if (board[0][2] == 'O' && board[1][1] == 'O' && board[2][0] == 'O')
winO[2] = 1;
for (int i=0;i<3;i++)
if (winO[i] == 1)
return 0;
return 1;
}
// Case 3. O가 X보다 많은 경우
// Case 3-1. X가 이미 이긴 경우는 비정상
int winX[3] = { 0, 0, 0 };
for (int i=0;i<3;i++) {
if (board[i][0] == 'X' && board[i][1] == 'X' && board[i][2] == 'X')
winX[0] = 1;
if (board[0][i] == 'X' && board[1][i] == 'X' && board[2][i] == 'X')
winX[1] = 1;
}
if (board[0][0] == 'X' && board[1][1] == 'X' && board[2][2] == 'X')
winX[2] = 1;
if (board[0][2] == 'X' && board[1][1] == 'X' && board[2][0] == 'X')
winX[2] = 1;
for (int i=0;i<3;i++)
if (winX[i] == 1)
return 0;
// Case 4. O의 개수가 X의 개수 + 1이 아니면 비정상
if (cntO -1 != cntX)
return 0;
return 1;
}```