diff --git a/yeongrok/0036-valid-sudoku/0036-valid-sudoku.js b/yeongrok/0036-valid-sudoku/0036-valid-sudoku.js new file mode 100644 index 0000000..168a2c3 --- /dev/null +++ b/yeongrok/0036-valid-sudoku/0036-valid-sudoku.js @@ -0,0 +1,54 @@ +/** + * @param {character[][]} board + * @return {boolean} + */ +var isValidSudoku = function(board) { + /* 0 1 2 + 3 4 5 + 6 7 8 */ + const area = [...Array(10).keys()].map(i => ({})); + + const columns = [...Array(10).keys()].map(i => ({})); + + for (let i = 0; i < board.length; i++) { + const row = board[i]; + const appearedInRow = {}; + for (let j = 0; j < row.length; j++) { + if (row[j] !== "." && (row[j] < 1 || row[j] > 9 || appearedInRow[row[j]] || columns[j][row[j]])) return false; + appearedInRow[row[j]] = true; + columns[j][row[j]] = true; + + let areaNum; + if (i < 3) { + if (j < 3) { + areaNum = 0; + } else if (j < 6) { + areaNum = 1; + } else { + areaNum = 2; + } + } else if (i < 6) { + if (j < 3) { + areaNum = 3; + } else if (j < 6) { + areaNum = 4; + } else { + areaNum = 5; + } + } + else { + if (j < 3) { + areaNum = 6; + } else if (j < 6) { + areaNum = 7; + } else { + areaNum = 8; + } + + } + if (row[j] !== "." && area[areaNum][row[j]]) return false; + area[areaNum][row[j]] = true; + } + } + return true; +}; diff --git a/yeongrok/0036-valid-sudoku/README.md b/yeongrok/0036-valid-sudoku/README.md new file mode 100644 index 0000000..1cef237 --- /dev/null +++ b/yeongrok/0036-valid-sudoku/README.md @@ -0,0 +1,55 @@ +

36. Valid Sudoku

Medium


Can you solve this real interview question? Valid Sudoku - Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules: + + 1. Each row must contain the digits 1-9 without repetition. + 2. Each column must contain the digits 1-9 without repetition. + 3. Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9 without repetition. + +Note: + + * A Sudoku board (partially filled) could be valid but is not necessarily solvable. + * Only the filled cells need to be validated according to the mentioned rules. + +  + +Example 1: + +[https://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Sudoku-by-L2G-20050714.svg/250px-Sudoku-by-L2G-20050714.svg.png] + + +Input: board = +[["5","3",".",".","7",".",".",".","."] +,["6",".",".","1","9","5",".",".","."] +,[".","9","8",".",".",".",".","6","."] +,["8",".",".",".","6",".",".",".","3"] +,["4",".",".","8",".","3",".",".","1"] +,["7",".",".",".","2",".",".",".","6"] +,[".","6",".",".",".",".","2","8","."] +,[".",".",".","4","1","9",".",".","5"] +,[".",".",".",".","8",".",".","7","9"]] +Output: true + + +Example 2: + + +Input: board = +[["8","3",".",".","7",".",".",".","."] +,["6",".",".","1","9","5",".",".","."] +,[".","9","8",".",".",".",".","6","."] +,["8",".",".",".","6",".",".",".","3"] +,["4",".",".","8",".","3",".",".","1"] +,["7",".",".",".","2",".",".",".","6"] +,[".","6",".",".",".",".","2","8","."] +,[".",".",".","4","1","9",".",".","5"] +,[".",".",".",".","8",".",".","7","9"]] +Output: false +Explanation: Same as Example 1, except with the 5 in the top left corner being modified to 8. Since there are two 8's in the top left 3x3 sub-box, it is invalid. + + +  + +Constraints: + + * board.length == 9 + * board[i].length == 9 + * board[i][j] is a digit 1-9 or '.'. \ No newline at end of file