문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
Tic-tac-toe는 3 x 3 행렬에서 두 명의 플레이어 A와 B가 플레이한다. Tic-Tac-Toe의 규칙은 다음과 같다.
2D 정수 배열 moves가 주어진다. moves[i] = [rowi, coli]는 i번째 배치가 gird[rowi][coli]를 나타낸다. 게임의 승자가 있다면 승자(A 또는 B)를 반환해라. 게임이 무승부라면 "Draw"를 반환해라. 만약 게임을 진행할 수 있다면 "Pending"을 반환해라.
#1
Input: moves = [[0, 0], [2, 0], [1, 1], [2, 1], [2, 2]]
Output: "A"
Explanation: A가 이겼고, 항상 먼저 시작한다.
#2
Input: moves = [[0, 0], [1, 1], [0, 1], [0, 2], [1, 0], [2, 0]]
Output: "B"
Explanation: B가 이겼다.
#3
Input: moves = [[0, 0], [1, 1], [2, 0], [1, 0], [1, 2], [2, 1], [0, 1], [0, 2], [2, 2]]
Output: "Draw"
Explanation: 더 이상 배치할 수 없어서 무승부로 끝난다.
class Solution {
public String tictactoe(int[][] moves) {
char[][] board = new char[3][3];
boolean isFirst = true;
for(int[] move : moves){
board[move[0]][move[1]] = isFirst ? 'X' : 'O';
isFirst = !isFirst;
}
for(int i = 0; i < 3; i++){
if(board[i][0] != 0 && board[i][0] == board[i][1] && board[i][1] == board[i][2]){
return board[i][0] == 'X' ? "A" : "B";
}
if(board[0][i] != 0 && board[0][i] == board[1][i] && board[1][i] == board[2][i]){
return board[0][i] == 'X' ? "A" : "B";
}
}
if(board[1][1] != 0 &&
(
(board[0][0] == board[1][1] && board[1][1] == board[2][2]) ||
(board[0][2] == board[1][1] && board[1][1] == board[2][0])
)
){
return board[1][1] == 'X' ? "A" : "B";
}
return moves.length == 9 ? "Draw" : "Pending";
}
}