[Leetcode] 36. Valid Sudoku

Seongjun Lee·2022년 2월 19일
0

[Leetcode] - Problem

목록 보기
36/43
post-thumbnail

Problem

문제 링크

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

Solution

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

JS Code

/**
 * @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()
}
profile
Hi there 👋

0개의 댓글