var isValidSudoku = function (board) {
// Set으로 중복을 없애준다.
let set = new Set();
for (let i = 0; i < board.length; i++) {
for (let j = 0; j < board[0].length; j++) {
let item = board[i][j];
// .가 아닌 경우만 체크
if (item !== '.') {
// String과 index를 통해 unique한 값을 만들어줌
let num = item;
let x = item + 'in row' + j; // x축을 탐색하는 변수 x
let y = item + 'in column' + i; // y축을 탐색하는 변수 y
// 9개의 박스 중 몇 번째 박스에 있는지(0부터 시작하는 박스) 탐색하는 변수 z
let z = num + 'in box' + (Math.floor(i / 3) * 3 + Math.floor(j / 3));
// 중복을 허용하지 않는 set의 특성을 활용한 조건
if (set.has(x) || set.has(y) || set.has(z)) return false;
// nested loop을 돌면서 set에 계속 넣어준다.
set.add(x);
set.add(y);
set.add(z);
}
}
}
return true;
};
이 풀이는 제 풀이가 아닌 다른 스터디원 분의 풀이를 보고 제가 이해한 부분을 옮긴 코드입니다. 기본적으로 Set을 사용해 중복 제거를 하셨고, 중간에 한번이라도 중복이 있다면 false
를 return
시키는 형태입니다.
저희 스터디원 분들의 풀이, 설명 항상 감사합니다!
수정, 지적을 환영합니다!
https://leetcode.com/problems/valid-sudoku/
https://leetcode.com/problems/kth-smallest-element-in-a-sorted-matrix/submissions/