본문 바로가기
알고리즘/LeetCode

[Leetcode][자바스크립트][Medium] 36. Valid Sudoku

by Benjamin_Choi 2022. 1. 10.

풀이

/**
 * 36_ValidSudoku.js
 * Medium
 * https://leetcode.com/problems/valid-sudoku/
 */

var isValidSudoku = function(board) {
    const row = new Array(9).fill(null).map(() => new Set([])), 
    	col = new Array(9).fill(null).map(() => new Set([])), 
        box = new Array(9).fill(null).map(() => new Set([]));

    for (let i = 0; i < 9; i++) {
        for (let j = 0; j < 9; j++) {
            if (board[i][j] !== ".") {
                if (row[i].has(board[i][j])) return false;
                if (col[j].has(board[i][j])) return false;
                if (box[getBoxNum(i, j)].has(board[i][j])) return false;

                row[i].add(board[i][j]);
                col[j].add(board[i][j]);
                box[getBoxNum(i, j)].add(board[i][j]);
            }
        }
    }

    return true;
};

function getBoxNum(i, j) {
    return 3 * Math.floor(i/3) + Math.floor(j/3);
}

2중 for문을 한 번만 돌리는데 신경써서 처리했다. row, col, box 를 각각 돌리는게 아니라 한 번 돌릴 때 한 번에 확인해서 처리했다. 

 

 

댓글