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 |