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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

#include <string>
#include <vector>
#include<iostream>
using namespace std;

//입출력 예 
//return 0
// X갯수 >= O 인 경우
// O와 X갯수가 같은 상황에서 O가 3개를 완성한 경우

//나머지는 return 1

int solution(vector<string> board) {
    int oCnt = 0;
    int xCnt = 0;
    for(int y = 0; y < board.size(); ++y){
        for(int x = 0; x < board[y].size(); ++x){
            if(board[y][x] == 'O')
            {
                oCnt++;
            }
            if(board[y][x] == 'X'){
                xCnt++;
            }
        }
    }
    //O 표시해야하나 X 표시한 경우
    if(xCnt>oCnt)return 0;
    //X 표시해야하나 O 표시한 경우
    if(xCnt+2 <=oCnt) return 0; //선공 차이가 최대 1회인데 2회 이상인 경우
    
    //선공이나 후공이 승리했지만 게임을 진행한 경우
    //1. 선공이 승리했음에도 게임이 진행된 경우
    if(xCnt==oCnt){
        //가로 r is row
        for(int r = 0; r < board.size(); ++r){
            if(board[r][0] == 'O' && board[r][1] == 'O' && board[r][2] == 'O') return 0;
        }
        //세로 c is col
        for(int c = 0; c < board[c].size(); ++c){
            if(board[0][c] == 'O' && board[1][c] == 'O' && board[2][c] == 'O') return 0;
        }
        //대각선
        if(board[0][0] == 'O' && board[1][1] == 'O' && board[2][2] == 'O') return 0;
        if(board[2][0] == 'O' && board[1][1] == 'O' && board[0][2] == 'O') return 0;
    }
    //2. 후공이 승리했음에도 게임이 진행한 경우
    if(oCnt==xCnt+1){
        //가로 r is row
        for(int r = 0; r < board.size(); ++r){
            if(board[r][0] == 'X' && board[r][1] == 'X' && board[r][2] == 'X') return 0;
        }
        //세로 c is col
        for(int c = 0; c < board.size(); ++c){
            if(board[0][c] == 'X' && board[1][c] == 'X' && board[2][c] == 'X') return 0;
        }
        //대각선
        if(board[0][0] == 'X' && board[1][1] == 'X' && board[2][2] == 'X') return 0;
        if(board[2][0] == 'X' && board[1][1] == 'X' && board[0][2] == 'X') return 0; 
    }
    return 1;
}

+ Recent posts