혼자서하는 틱택토

Lee1231234·2023년 5월 18일

코딩테스트

목록 보기
56/95

틱택토의 상태를 검증하는 문제이다.
일단 틱택토에서 실수가 있는경우는 다음과 같다.
1. O의 숫자-X의 숫자가 0이거나 1이 아닐때 (O가 선공)
2. X가 완성했는데 O도 완성하는경우 또는 그 반대.
3. X가 완성된 상태에서 X의 숫자+1이 O의 숫자와 같지않을 때
4. O가 완성된 상태에서 X의 숫자가 O의 숫자와 같지않을 때
이를 통해서 구현할수만 있다면 해결 가능한 문제이다.

코드

class Solution {
 
    public int solution(String[] board) {
        String[][] boardBox= new String[3][3];
        int[] win =new int[2];
        int Xcount=0,Ocount=0;
        for(int i=0;i<3;i++){
            String boardRow = board[i];
            for(int j=0;j<3;j++){
               boardBox[i][j] = Character.toString(boardRow.charAt(j));
                if(boardBox[i][j].equals("X")){
                    Xcount++;
                }else if(boardBox[i][j].equals("O")){
                    Ocount++;
                }
            }
        }
       
        boardCheckWin(boardBox,win);
//        System.out.println(win[0] + ""+win[1]);
        if(!(Ocount-Xcount==0||Ocount-Xcount==1)) return 0;
        if(win[0]>0&&win[1]>0) return 0;
        if(win[0]>0&&Xcount!=Ocount) return 0;
        if(win[1]>0&&(Xcount+1)!=Ocount) return 0;
        int answer = 1;
        return answer;
    }
    void boardCheckWin(String[][] board,int[] win){
       for(int i=0;i<3;i++){           
           if(board[i][0].equals(board[i][1])&&board[i][1].equals(board[i][2])){
                if(board[i][0].equals("X")){
                    win[0]+=1;                   
                }else if(board[i][0].equals("O")){
                    win[1]+=1;
                }
           }           
           if(board[0][i].equals(board[1][i])&&board[1][i].equals(board[2][i])){
                if(board[0][i].equals("X")){
                    win[0]+=1;
                }else if(board[0][i].equals("O")){
                     win[1]+=1;
                }        
           }
           
       }
        if(board[0][0].equals(board[1][1])&&board[1][1].equals(board[2][2])){
             if(board[0][0].equals("X")){
                 win[0]+=1;
            }else if(board[0][0].equals("O")){
                 win[1]+=1;
            }
        }
         if(board[0][2].equals(board[1][1])&&board[1][1].equals(board[2][0])){
              
             if(board[0][2].equals("X")){
                win[0]+=1;
             }else if(board[0][2].equals("O")){
                win[1]+=1;
            }
            
        }
        
    }
}

마지막에 구현과정에서 테스트케이스가 맞지않는 경우가 생겼다. 뭐가 문제인지 몰라서 한참 찾아본 결과 문자 일치를 ==를 통해서 해놓은 부분이 있어서 오류가 났던것. 다음부터는 조심해야겠다.
또한 자바는 call by value인걸 잠시 잊고있었다. 더 숙고하는 버릇을 들여야겠다.

profile
not null

0개의 댓글