[프로그래머스] 절대 외부 IDE를 써선 안돼/Java

[lv2] 혼자서 하는 틱택토

SH3542 2024. 12. 10. 15:42

https://school.programmers.co.kr/learn/courses/30/lessons/160585

 

틱택토 게임판이 주어졌을 때, 가능한 경우인지 판단하는 단순 구현 문제다.

 

고려한 경우 중 코드에 쓰지 않은 경우가 있다.

(이는 O와 X개수 비교 조건에서 자동으로 걸러지므로 제외해도 된다.)

 

e.g.)

OXO

XOX

OXO

(중간의 O를 마지막으로 두었다고 가정하면 올바른 경우, 아니라면 틀린 경우이므로 => 가능한 경우이다.)

 

e.g.)

OOO

. . .

OOO

(이어진 곳이 2쌍 이상이고 겹치지 않음 => 순서를 어떻게 배치하던 불가능한 경우 => 하지만, O와 X의 개수 비교에서 자동으로 걸러지므로 고려X)

 

class Solution {
    public int solution(String[] board) {
        char[][] b = new char[3][3];
        int O = 0, X = 0;

        for(int i=0; i<3; i++) {
            char[] r = board[i].toCharArray();

            for(int j=0; j<3; j++) {
                char c = r[j];

                b[i][j] = c;

                if(c == 'O')
                    O++;
                else if(c == 'X')
                    X++;
            }
        }

        boolean Owin = isWin('O', b);
        boolean Xwin = isWin('X', b);

        if(O != X && O != X + 1)
            return 0;

        if(Owin && Xwin)
            return 0;

        if(Xwin && O > X)
            return 0;

        if(Owin && O == X)
            return 0;

        return 1;
    }

    static boolean isWin(char c, char[][] b) {


        for(int i=0; i<3; i++) {
            if(c == b[i][0] && c == b[i][1] && c == b[i][2])
                return true;

            if(c == b[0][i] && c == b[1][i] && c == b[2][i])
                return true;
        }

        if(c == b[0][0] && c == b[1][1] && c == b[2][2])
            return true;

        if(c == b[0][2] && c == b[1][1] && c == b[2][0])
            return true;

        return false;
    }
}