Skip to content

[Leetcode] 36. Valid Sudoku ​

Problem ​

문제 링크

스도쿠 문제에 오류가 없는지 확인하는 문제
(풀지않은 상태에서 문제에 오류가 없는지만 확인하면된다.)

Solution ​

  1. 가로행에대한 중복되는 숫자없는지 확인
  2. 세로행에대한 중복되는 숫자가 없는지 확인
  3. 각각의 사각형에서 중복되는 숫자가 없는지 확인

JS Code ​

javascript
/**
 * @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()
}