프로그래머스 LEVEL 2(혼자서 하는 틱택토)
-
사용 언어 : javascript
-
해결 날짜 : 2023-05-07
-
해결 방법 :
-
정상적으로 틱택토가 이뤄진 경우는 다음과 같다.
- O의 개수 - X의 개수는 0 또는 1이다.
- O가 이긴 경우, O의 개수는 X의 개수보다 1개 많다.
- X가 이긴 경우, O의 개수는 X의 개수와 같다.
- 둘 다 이긴 경우는 존재하지 않는다.
-
따라서 board를 돌며 가로, 세로, 대각선을 확인해 O 또는 X가 이긴 경우를 확인
- O와 X가 둘 다 1 이상인 경우, 정상적이지 않으므로 0 반환
- O만 1 이상인 경우, O의 개수가 X의 개수보다 1개 많은 경우만 1, 나머지 0 반환
- X만 1 이상인 경우, O의 개수가 X의 개수와 같은 경우만 1, 나머지 0 반환
- 그 외의 경우 정상적이므로 1 반환
-
-
회고 :
- x
-
코드
const check = (board, ONum, XNum) => { const map = { O: 0, X: 0, }; for (let i = 0; i < 3; i++) { if (board[i][0] === board[i][1] && board[i][1] === board[i][2] && board[i][0] !== '.') { map[board[i][0]] += 1; } if (board[0][i] === board[1][i] && board[1][i] === board[2][i] && board[0][i] !== '.') { map[board[0][i]] += 1; } } if (board[0][0] === board[1][1] && board[1][1] === board[2][2] && board[0][0] !== '.') { map[board[0][0]] += 1; } if (board[0][2] === board[1][1] && board[1][1] === board[2][0] && board[0][2] !== '.') { map[board[0][2]] += 1; } if (map.O > 0 && map.X > 0) return 0; else if (map.O > 0 && ONum !== XNum + 1) return 0; else if (map.X > 0 && ONum !== XNum) return 0; return 1; }; function solution(board) { board = board.map((row) => row.split('')); const flattedBoard = board.flat(); const ONum = flattedBoard.filter((v) => v === 'O').length; const XNum = flattedBoard.filter((v) => v === 'X').length; if (ONum - XNum < 0 || ONum - XNum > 1) { return 0; } return check(board, ONum, XNum); }
-
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges