Oops, All Code!/🤯 Oops, My Algorithm!

꒰ྀི 09. LeetCode:: 유효한 수도쿠

밍동망동 2024. 7. 22. 21:38

이번 차시부터 LeetCode 사이트를 이용했다.

서양권 사이트라 저작권 규정을 모르겠기 때문에 문제는 요약해 작성하겠다.

 

중간 단계이다.

9 x 9 수도쿠 보드의 유효성을 검증
 - 각 행에 1부터 9까지 숫자가 반복 없이 포함
 - 각 열에 1부터 9까지 숫자가 반복 없이 포함
 - 3x3 격자의 각 하위 상자에는 1부터 9까지 숫자가 반복 없이 포함

 

해당 문제를 풀기 위해 세 가지 검사를 한다.

1. 모든 행에 대한 유효성 검사
2. 모든 열에 대한 유효성 검사
3. 모든 3x3 하위 상자에 대한 유효성 검사
function isValidSudoku(board) {
    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;

            const boxIndex = Math.floor(i / 3) * 3 + Math.floor(j / 3);

            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;
}
Set을 활용
  - 3x3 박스의 중복 여부를 확인하기 위해
    순서를 보장하지 않지만, 중복 여부만 확인하면 됐기 때문에 Set을 사용했음