728x90
틱택토라고 하였지만, 내 생각엔 영락없는 빙고였다.
만약 3x3으로 제한되지 않았다면 더 어려운 문제가 되었을 것 같았다.
여러 조건을 파악하고 반례를 찾는 게 핵심인 문제였다고 생각한다.
const check = (board, char) => {
let count = 0;
for(let i = 0; i < 3; i++) {
if(board[i][0] === char &&
board[i][1] === char &&
board[i][2] === char) {
count++;
}
}
for(let i = 0; i < 3; i++) {
if(board[0][i] === char &&
board[1][i] === char &&
board[2][i] === char) {
count++;
}
}
// cross
if(board[0][0] === char &&
board[1][1] === char &&
board[2][2] === char) {
count += 1;
}
if(board[0][2] === char &&
board[1][1] === char &&
board[2][0] === char) {
count += 1;
}
return count;
}
function solution(board) {
const str = board.join("");
let lenX = str.split("").filter(el => el === 'X').length;
let lenO = str.split("").filter(el => el === 'O').length;
if(!(lenO - lenX === 0 || lenO - lenX == 1)) {
// first attack is O
return 0;
}
const comX = check(board, 'X');
const comO = check(board, 'O');
if(comX >= 1 && comO >= 1) {
return 0;
}
if(comX > 2 || comO > 2) {
// 0 -> 2 answer making is possible
return 0;
}
if(comX === 1 && lenX !== lenO) {
return 0;
}
if(comO === 1 && lenX + 1 !== lenO) {
return 0;
}
return 1;
}
이번 문제는 조건을 확인하는 게 어려웠다.
특히 틀린 케이스가 발견 되었을 때 반례를 찾는 게 어려웠는데, 특히 한번에 두 개의 빙고가 생기며 이기는 경우를 생각하지 못했었다.
그리고 꼼꼼하게 확인하지 않아 대각선으로 빙고가 생기는 경우를 확인하지 않는 등 섬세함이 필요한 문제였다.
728x90
'코딩테스트 연습' 카테고리의 다른 글
프로그래머스 코딩테스트 연습 - 덧칠하기 JavaScript (0) | 2023.03.31 |
---|---|
프로그래머스 코딩테스트 연습 - 바탕화면 정리 JavaScript (0) | 2023.03.22 |
프로그래머스 코딩테스트 연습 - 대충 만든 자판 JavaScript (0) | 2023.03.01 |
프로그래머스 코딩테스트 연습 - 카드 뭉치 JavaScript (0) | 2023.02.25 |
프로그래머스 코딩테스트 연습 - 숫자 변환하기 JavaScript (0) | 2023.02.11 |