스도쿠는 대각선 검사를 하지 않는다는 것을 알게되었음..
서브 박스를 검사하는 로직이 굉장히 중요하다.
function isValidSudoku(board: string[][]): boolean {
// 행, 열, 3x3 서브 박스를 검사하기 위한 Set 배열
const rows = Array.from({ length: 9 }, () => new Set());
const cols = Array.from({ length: 9 }, () => new Set());
const boxes = Array.from({ length: 9 }, () => new Set());
for (let i = 0; i < 9; i++) {
for (let j = 0; j < 9; j++) {
const num = board[i][j];
if (num === '.') continue; // 빈 칸 무시
// 3x3 서브 박스의 인덱스 계산
const boxIndex = Math.floor(i / 3) * 3 + Math.floor(j / 3);
// 행, 열, 3x3 서브 박스에 중복된 숫자가 있는지 확인
if (rows[i].has(num) || cols[j].has(num) || boxes[boxIndex].has(num)) {
return false;
}
// 값 추가
rows[i].add(num);
cols[j].add(num);
boxes[boxIndex].add(num);
}
}
return true;
}