(LeetCode) 36. Valid Sudoku

Valid Sudoku

  • Explore : Interview > Top Interveiw Questions > Easy Collection
  • 분류 : Array
  • 난이도 : Medium

Problem

Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:

Each row must contain the digits 1-9 without repetition.
Each column must contain the digits 1-9 without repetition.
Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9 without repetition.

Example 1

1
2
3
4
5
6
7
8
9
10
11
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

1
2
3
4
5
6
7
8
9
10
11
12
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 or '.'.

Solution

Exapnder
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
fun isValidSudoku(board: Array<CharArray>): Boolean {
var set = HashSet<String>()

for (row in 0 until 9) {
for (col in 0 until 9) {
var digit = board[row][col]
if (digit == '.') {
continue
}
if (!set.add("digit : $digit row : $row")) {
return false
}
if (!set.add("digit : $digit col : $col")) {
return false
}
if (!set.add("digit : $digit row : ${row / 3} col : ${col / 3}")) {
return false
}
}
}
return true
}
}

Point of Thinking

  • 스도쿠 문제의 성립 조건을 검증하면 된다.
    • 가로 한 줄에 중복되는 수가 있으면 안된다.
    • 세로 한 줄에 중복되는 수가 있으면 안된다.
    • 3 x 3 블럭안에 중복되는 수가 있으면 안된다.
  • 중복 제거를 위해 Set을 활용하여 검증하면 된다.
    • 숫자들만 넣어서 검증할까 생각해봤지만, 문자열을 이용하면 하나의 Set으로 끝낼 수 있다.