반응형
문제
혼자서 하는 틱택토
https://school.programmers.co.kr/learn/courses/30/lessons/160585
풀이
설명
게임판이 규칙을 지켜서 틱택토를 진행했을 때 나올 수 있는 상황인지를 구하는 문제입니다.
규칙은 다음과 같습니다.
- 선공이 "O", 후공이 "X"를 번갈아가면서 빈칸에 표시합니다.
- 한 줄이 같은 문양으로 채워지면 해당 플레이어의 승리로 게임을 종료합니다.
다음과 같은 상황은 무효처리됩니다.
- 자신의 차례가 아닌데 플레이한 경우
- 한 플레이어의 승리로 게임이 종료되었음에도 그 게임을 진행한 경우
위 사항들을 고려했을 때, 올바른 게임판의 조건은 다음과 같습니다.
- O의 개수는 X의 개수와 같거나 하나 더 많아야 합니다.
- 선공과 후공 둘 중 하나만 승리할 수 있습니다.
- 선공이 승리한 경우, O의 개수는 X의 개수보다 하나 더 많아야 합니다.
- 후공이 승리한 경우, X의 개수는 O의 개수와 같아야 합니다.
예시 코드
function solution(board) {
let oCount = 0;
let xCount = 0;
for (const row of board) {
for (const col of row) {
if (col === "O") oCount++;
else if (col === "X") xCount++;
}
}
const oWin = isWinning("O");
const xWin = isWinning("X");
if (
xCount > oCount ||
oCount > xCount + 1 ||
(oWin && xWin) ||
(oWin && oCount === xCount) ||
(xWin && oCount !== xCount)
)
return 0;
return 1;
function isWinning(player) {
return (
(board[0][0] === player &&
board[0][1] === player &&
board[0][2] === player) ||
(board[1][0] === player &&
board[1][1] === player &&
board[1][2] === player) ||
(board[2][0] === player &&
board[2][1] === player &&
board[2][2] === player) ||
(board[0][0] === player &&
board[1][0] === player &&
board[2][0] === player) ||
(board[0][1] === player &&
board[1][1] === player &&
board[2][1] === player) ||
(board[0][2] === player &&
board[1][2] === player &&
board[2][2] === player) ||
(board[0][0] === player &&
board[1][1] === player &&
board[2][2] === player) ||
(board[0][2] === player &&
board[1][1] === player &&
board[2][0] === player)
);
}
}
'Coding Problem' 카테고리의 다른 글
[BOJ 2631] 줄 세우기 (0) | 2025.02.11 |
---|---|
[프로그래머스] 카카오 - 양궁대회 (0) | 2025.02.08 |
[프로그래머스] PCCP - 석유 시추 (0) | 2025.02.05 |
[프로그래머스] 데브매칭 - 행렬 테두리 회전하기 (0) | 2025.02.04 |
[프로그래머스] 카카오 - 길 찾기 게임 (0) | 2025.02.03 |