Oops, All Code!/🤯 Oops, My Algorithm!
꒰ྀི 09. LeetCode:: 유효한 수도쿠
밍동망동
2024. 7. 22. 21:38
이번 차시부터 LeetCode 사이트를 이용했다.
서양권 사이트라 저작권 규정을 모르겠기 때문에 문제는 요약해 작성하겠다.
중간 단계이다.
9 x 9 수도쿠 보드의 유효성을 검증
- 각 행에 1부터 9까지 숫자가 반복 없이 포함
- 각 열에 1부터 9까지 숫자가 반복 없이 포함
- 3x3 격자의 각 하위 상자에는 1부터 9까지 숫자가 반복 없이 포함
해당 문제를 풀기 위해 세 가지 검사를 한다.
1. 모든 행에 대한 유효성 검사
2. 모든 열에 대한 유효성 검사
3. 모든 3x3 하위 상자에 대한 유효성 검사
function isValidSudoku(board) {
const rows = Array.from({ length: 9 }, () => new Set());
const cols = Array.from({ length: 9 }, () => new Set());
const boxes = Array.from({ length: 9 }, () => new Set());
for (let i = 0; i < 9; i++) {
for (let j = 0; j < 9; j++) {
const num = board[i][j];
if (num === '.') continue;
const boxIndex = Math.floor(i / 3) * 3 + Math.floor(j / 3);
if (rows[i].has(num) || cols[j].has(num) || boxes[boxIndex].has(num)) {
return false;
}
rows[i].add(num);
cols[j].add(num);
boxes[boxIndex].add(num);
}
}
return true;
}
Set을 활용
- 3x3 박스의 중복 여부를 확인하기 위해
순서를 보장하지 않지만, 중복 여부만 확인하면 됐기 때문에 Set을 사용했음