[LeetCode] Find Winner on a Tic Tac Toe Game

아르당·2026년 4월 15일

LeetCode

목록 보기
262/303
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

Tic-tac-toe는 3 x 3 행렬에서 두 명의 플레이어 A와 B가 플레이한다. Tic-Tac-Toe의 규칙은 다음과 같다.

  • 플레이어는 자신의 차례에 빈 칸에 문자를 배치한다.
  • 첫 번째 플레이어는 항상 문자 'X'를 배치하고, 두 번째 플레이어는 항상 문자 'O'를 배치한다.
  • 문자 'X'와 'O'는 항상 비어있는 칸에 배치하고, 비어있지 않는 칸에는 절대 배치하지 않는다.
  • 게임은 같은 문자가 행, 열, 대각선으로 어느 쪽으로 세 개가 있다면 종료된다.
  • 게임은 모든 칸이 비어있지 않으면 종료된다.
  • 게임이 끝나면 더 이상 배치할 수 없다.

2D 정수 배열 moves가 주어진다. moves[i] = [rowi, coli]는 i번째 배치가 gird[rowi][coli]를 나타낸다. 게임의 승자가 있다면 승자(A 또는 B)를 반환해라. 게임이 무승부라면 "Draw"를 반환해라. 만약 게임을 진행할 수 있다면 "Pending"을 반환해라.

Problem

#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: 더 이상 배치할 수 없어서 무승부로 끝난다.

Constraints

  • 1 <= moves.length <= 9
  • moves[i].length == 2
  • 0 <= rowi, coli <= 2
  • moves에 반복되는 요소는 없다.
  • moves는 tic tac toe의 규칙을 따른다.

Solved

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";
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글