스도쿠 문제에 오류가 없는지 확인하는 문제
(풀지않은 상태에서 문제에 오류가 없는지만 확인하면된다.)
/**
* @param {character[][]} board
* @return {boolean}
*/
var isValidSudoku = function (board) {
const getArr = () => Array.from(Array(10), (_, i) => (i ? 0 : 1))
const isValidate = (arr) => arr.every((item) => item < 2)
const doCol = () => {
for (let i = 0; i < 9; i++) {
let arr = getArr()
for (let j = 0; j < 9; j++) {
const temp = board[i][j]
if (temp != '.') arr[temp]++
}
if (!isValidate(arr)) return false
}
return true
}
const doRow = () => {
for (let i = 0; i < 9; i++) {
let arr = getArr()
for (let j = 0; j < 9; j++) {
const temp = board[j][i]
if (temp != '.') arr[temp]++
}
if (!isValidate(arr)) return false
}
return true
}
const doRectangle = () => {
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
let arr = getArr()
// 각각의 사각형 인덱스를 초기값으로 잡음
for (let k = i * 3; k < i * 3 + 3; k++) {
for (let l = j * 3; l < j * 3 + 3; l++) {
const temp = board[k][l]
if (temp != '.') arr[temp]++
}
}
if (!isValidate(arr)) return false
} // rectangle
}
return true
}
return doCol() && doRow() && doRectangle()
}