Algorithm/문제풀이
[LeetCode] Valid Sudoku 문제 풀이
bluespacedev
2021. 8. 20. 22:25
https://leetcode.com/problems/valid-sudoku/
보드판이 스도쿠를 만족하는 지 검사하는 문제이다.
스도쿠 조건에 맞춰서 다 검사하면 된다.
조건1
3x3 에서 1~9까지 숫자가 존재
조건2
Column 에서 1~9까지 숫자가 존재
조건3
Row 에서 1~9까지 숫자가 존재
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
for (int y = 0; y < 9; y+=3) {
for (int x = 0; x < 9; x+=3) {
if (!isBlock(board, y, x)) {
return false;
}
}
}
for (int y = 0; y < 9; ++y) {
if (!isCol(board, y)) {
return false;
}
}
for (int x = 0; x < 9; ++x) {
if (!isRow(board, x)) {
return false;
}
}
return true;
}
bool isBlock(vector<vector<char>>& board, int sy, int sx) {
bool visit[10] = {false};
for (int y = 0; y < 3; ++y) {
for (int x = 0; x < 3; ++x) {
char c = board[sy+y][sx+x];
if (c == '.')
continue;
int num = c - '0';
if (visit[num])
return false;
visit[num] = true;
}
}
return true;
}
bool isCol(vector<vector<char>>& board, int sy) {
bool visit[10] = {false};
for (int x = 0; x < 9; ++x) {
char c = board[sy][x];
if (c == '.')
continue;
int num = c - '0';
if (visit[num])
return false;
visit[num] = true;
}
return true;
}
bool isRow(vector<vector<char>>& board, int sx) {
bool visit[10] = {false};
for (int y = 0; y < 9; ++y) {
char c = board[y][sx];
if (c == '.')
continue;
int num = c - '0';
if (visit[num])
return false;
visit[num] = true;
}
return true;
}
};