🚩 문제 주소
📄 접근 방법
구현
더보기
틱택토에서 승리 조건은 8가지 밖에 없기 때문에 직접 구현해주었습니다.
주어진 게임판을 1차원 배열로 바꿔준 후, O와 X의 개수를 구해주었고, O와 X가 승리했는지 구했습니다.
- O의 개수가 X의 개수보다 적다
- O가 성공했는데 X의 개수와 같거나 적다
- X가 성공했는데 O의 개수보다 적다
- O와 X가 동시에 성공했다
이 4가지 조건 중 하나라도 걸리면 0을 반환했고, 걸리는게 없다면 1을 반환했습니다.
👨💻 나의 코드
const checkWin = (board, shape) => {
if (board[0][0]===shape) {
if (board[0][1]===shape && board[0][2]===shape) return true;
if (board[1][1]===shape && board[2][2]===shape) return true;
if (board[1][0]===shape && board[2][0]===shape) return true;
}
if (board[0][1]===shape && board[1][1]===shape && board[2][1]===shape) return true;
if (board[0][2]===shape && board[1][2]===shape && board[2][2]===shape) return true;
if (board[1][0]===shape && board[1][1]===shape && board[1][2]===shape) return true;
if (board[2][0]===shape && board[2][1]===shape && board[2][2]===shape) return true;
if (board[0][2]===shape && board[1][1]===shape && board[2][0]===shape) return true;
return false;
}
function solution(board) {
const flatBoard = board.reduce((acc, cur) => [...acc, ...cur]);
const oCnt = flatBoard.filter(val => val === 'O').length;
const xCnt = flatBoard.filter(val => val === 'X').length;
const owin = checkWin(board, 'O');
const xwin = checkWin(board, 'X');
if (oCnt < xCnt) return 0;
if (owin && oCnt <= xCnt) return 0;
if (xwin && xCnt < oCnt) return 0;
if (oCnt - xCnt >= 2) return 0;
return 1;
}
'Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스 / JS] 소수 찾기 - Level 2 (1) | 2023.05.02 |
---|---|
[프로그래머스 / JS] 전력망을 둘로 나누기 - Level 2 (0) | 2023.04.29 |
[프로그래머스 / JS] 모음사전 - Level 2 (0) | 2023.04.28 |
[프로그래머스 / JS] 배열 조각하기 - Level 0 (0) | 2023.04.21 |
[프로그래머스 / JS] 게임 맵 최단거리 - Level 2 (1) | 2023.04.17 |