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()
}