혼자서 하는 틱택토

well-life-gm·2024년 3월 13일
0

프로그래머스

목록 보기
124/125

간단한 구현 문제

#include <string>
#include <vector>

using namespace std;

int solution(vector<string> board) {
    int answer = -1;
    
    int cntO = 0;
    int cntX = 0;
    for (int i=0;i<3;i++) {
        for (int j=0;j<3;j++) {
            if (board[i][j] == 'O')
                cntO++;
            if (board[i][j] == 'X')
                cntX++;
        }
    }
    
    // Case 1. X가 O 보다 많으면 비정상
    if (cntX > cntO)
        return 0;
    
    // Case 2. X와 O가 같은데, O가 이미 이긴 경우면 비정상, 아니면 정상
    if (cntX == cntO) {
        int winO[3] = { 0, 0, 0 };
        for (int i=0;i<3;i++) {
            if (board[i][0] == 'O' && board[i][1] == 'O' && board[i][2] == 'O')
                winO[0] = 1;
            if (board[0][i] == 'O' && board[1][i] == 'O' && board[2][i] == 'O')
                winO[1] = 1;
        }
        if (board[0][0] == 'O' && board[1][1] == 'O' && board[2][2] == 'O')
            winO[2] = 1;
        if (board[0][2] == 'O' && board[1][1] == 'O' && board[2][0] == 'O')
            winO[2] = 1;

        for (int i=0;i<3;i++)
            if (winO[i] == 1)
                return 0;
        
        return 1;
    }

    // Case 3. O가 X보다 많은 경우
    
    // Case 3-1. X가 이미 이긴 경우는 비정상
    int winX[3] = { 0, 0, 0 };
    for (int i=0;i<3;i++) {
        if (board[i][0] == 'X' && board[i][1] == 'X' && board[i][2] == 'X')
            winX[0] = 1;
        if (board[0][i] == 'X' && board[1][i] == 'X' && board[2][i] == 'X')
            winX[1] = 1;
    }
    if (board[0][0] == 'X' && board[1][1] == 'X' && board[2][2] == 'X')
        winX[2] = 1;
    if (board[0][2] == 'X' && board[1][1] == 'X' && board[2][0] == 'X')
        winX[2] = 1;

    for (int i=0;i<3;i++)
        if (winX[i] == 1)
            return 0;
    
    // Case 4. O의 개수가 X의 개수 + 1이 아니면 비정상
    if (cntO -1 != cntX)
        return 0;
    
    return 1;
}```
profile
내가 보려고 만든 블로그

0개의 댓글