728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/160585
풀이
이번 문제는 조건만 잘 찾아내면 간단한 구현 문제이다.
이 문제에서 답이 1이 나오는 경우는 다음과 같다.
O의 개수가 X의 수 보다 1 크며 O 빙고가 X 빙고 보다 많을 때, O의 개수가 X 개수와 같고 X 빙고가 더 많을 때, O 빙고와 X 빙고의 수가 0이고 O의 수가 X 보다 1클 때 이다.
중의해야할 점은 직선 뿐만 아니라 대각선으로도 빙고가 완성될 수 있으며, 틱택토 게임은 이기는 순서에 두개의 빙고를 완성해 이길 수 있다는 점을 명시하자(두 번째 조건을 생각못해 1차 풀이에서는 틀렸다).
코드
function solution(board) {
let cnt = 0;
let oT = 0;
let xT = 0;
const center = board[1][1];
board.forEach(el => {
let oC = 0;
let xC = 0;
for (let i = 0; i < 3; i++) {
if (el[i] === 'O') {
cnt += 1;
oC += 1;
}
else if (el[i] === 'X') {
cnt -= 1;
xC += 1;
}
}
if (oC === 3) oT += 1;
else if (xC === 3) xT += 1;
});
for (let i = 0; i < 3; i++) {
let oC = 0;
let xC = 0;
for (let j = 0; j < 3; j++) {
if (board[j][i] === 'O') oC += 1;
else if (board[j][i] === 'X') xC += 1;
}
if (oC === 3) oT += 1;
else if (xC === 3) xT += 1;
}
if (center !== '.' && ((center === board[0][0] && center === board[2][2]) || (center === board[0][2] && center === board[2][0]))) {
center === 'X' ? xT += 1 : oT += 1;
}
if (cnt < 0) return 0;
else if ((oT > xT && cnt === 1) || (oT < xT && cnt === 0) || (oT === 0 && xT === 0 && cnt === 0) || (oT === 0 && xT === 0 && cnt === 1)) {
return 1;
}
else return 0;
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
[JS] 순위 검색 (0) | 2024.09.11 |
---|---|
[JS] 양궁대회 (0) | 2024.09.09 |
[JS] 혼자 놀기의 달인 (0) | 2024.09.05 |
[JS] 이모티콘 할인행사 (3) | 2024.09.02 |
[JS] 거스름돈 (1) | 2024.08.30 |