FrontEnd/프로그래머스

[JS] 혼자서 하는 틱택토

728x90

틱택토는 사실 3*3의 작은 배열이기 때문에 직접 개수를 한번 세 보는식으로 판별했다.

 

 

사실 아래 조건을 충족하지 않으면 모두 일치하지 않는 틱택토이다.

 

1. O,X 개수의 차이가0,1 이상인 경우

2. x,o 둘다 점수가 난 경우

3. x가 점수났을때 o의 개수와 x의 개수가 다른 경우

4. o가 점수났을때 o의 개수와 x+1의 개수가 다른경우

 

해당 케이스를 제외하면 점수가 날 수 없다.

 

function solution(board) {
    
    //O,X 개수세기
    let oCnt=0;
    let xCnt=0;
    for (let i=0 ; i<3 ; i++) {
        for (let j=0 ; j<3 ; j++){
            if (board[i][j]==="O") oCnt ++;
            else if (board[i][j]==="X") xCnt ++;
        }
    }
    
    if (![0,1].includes(oCnt-xCnt)) return 0
    
    //만들어진 점수 비교
    let oScore = 0
    let xScore = 0
    //가로,세로
    for (let i=0 ; i<3;i++){
        if (board[i]==='XXX') xScore++;
        else if (board[i]==='OOO') oScore++;
        if (board[0][i]+board[1][i]+board[2][i] === 'XXX')xScore++;
        else if (board[0][i]+board[1][i]+board[2][i] === 'OOO') oScore++;
    }
    //대각선
    if (board[0][0]+board[1][1]+board[2][2]==='XXX') xScore++;
    else if (board[0][0]+board[1][1]+board[2][2]==='OOO') oScore++;
    if (board[0][2]+board[1][1]+board[2][0]==='XXX') xScore++;
    else if (board[0][2]+board[1][1]+board[2][0]==='OOO') oScore++;
    
    if (0<xScore && 0<oScore) return 0
    if (0<xScore && xCnt!==oCnt) return 0
    if (0<oScore && xCnt+1!==oCnt) return 0
    
    
    return 1
}
728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 호텔 대실  (0) 2023.05.23
[JS] 미로탈출  (0) 2023.05.20
[JS] 리코쳇 로봇  (0) 2023.05.19
[JS] 광물 캐기  (0) 2023.05.18
[JS] 과제 진행하기  (1) 2023.05.17