본문 바로가기
PS/프로그래머스

[프로그래머스] 혼자서 하는 틱택토 - Java

by 진꿈청 2024. 6. 7.
class Solution {
    public int solution(String[] board) {
        String[][] board_Arr = new String[3][3];
        
        for(int i = 0; i < 3; i++){
            board_Arr[i] = board[i].split("");
        }
        int o = 0;
        int x = 0;
        
        for(int i = 0; i < 3; i++){
            for(int j = 0; j < 3; j++){
                if(board_Arr[i][j].equals("O")){
                    o++;
                } else if(board_Arr[i][j].equals("X")){
                    x++;
                }
            }
        }
        
        if(o < x || Math.abs(o - x) >= 2){
            return 0;
        }
        
        boolean check = false;
        boolean oWin = false;
        boolean xWin = false;
        
        for(int i = 0; i < 3; i++){
            if(board_Arr[i][0].equals(board_Arr[i][1]) && board_Arr[i][1].equals(board_Arr[i][2])){
                check = true;
                if(board_Arr[i][0].equals("X")){
                    xWin = true;
                } else if(board_Arr[i][0].equals("O")){
                    oWin = true;
                }
            }
            else if(board_Arr[0][i].equals(board_Arr[1][i]) && board_Arr[1][i].equals(board_Arr[2][i])){
                check = true;
                if(board_Arr[0][i].equals("X")){
                    xWin = true;
                } else if(board_Arr[0][i].equals("O")){
                    oWin = true;
                }
            }
        }
        
        if(check){
            if(xWin && oWin)
                return 0;
            else if(oWin){
                if(Math.abs(o - x) == 0)
                    return 0;
            } else if(xWin){
                if(o > x){
                    return 0;
                }
            }
        }
        
        if(board_Arr[0][0].equals(board_Arr[1][1]) && board_Arr[1][1].equals(board_Arr[2][2])){
            check = true;
            if(board_Arr[0][0].equals("X")){
                    xWin = true;
                } else if(board_Arr[0][0].equals("O")){
                    oWin = true;
                }
        }
        else if(board_Arr[0][2].equals(board_Arr[1][1]) && board_Arr[1][1].equals(board_Arr[2][0])){
            check = true;
            if(board_Arr[0][2].equals("X")){
                    xWin = true;
                } else if(board_Arr[0][2].equals("O")){
                    oWin = true;
                }
        }
        
        if(check){
           if(xWin && oWin)
                return 0;
            else if(oWin){
                if(Math.abs(o - x) == 0)
                    return 0;
            } else if(xWin){
                if(o > x){
                    return 0;
                }
            }
        }
        
        return 1;
    }
}