320x100
https://leetcode.com/problems/valid-sudoku/
문제를 요약하자면 Input으로 주어진 스도쿠 데이터의 현재까지 상태가 규칙에 맞는지 아닌지를 판별하면 되는 문제.
스도쿠의 규칙은
1. 한 가로줄에 중복되는 숫자가 없을 것
2. 한 세로줄에 중복되는 숫자가 없을 것
3. 겹치지 않는 3x3 칸 안에 중복되는 숫자가 없을 것
3가지다.
bool isValidSudoku(vector<vector<char>>& board) {
// 가로 세로가 동일하다고 가정이니까
int size = board.size();
for (int i=0; i<size; ++i)
{
for (int j=0; j<size; ++j)
{
if (board[i][j] == '.') {
continue;
}
// 가로, 세로
for (int k = 0; k < size; ++k) {
if ((i != k && board[i][j] == board[k][j]) ||
(j != k && board[i][j] == board[i][k])) {
return false;
}
}
// 3x3
for (int k = i / 3 * 3; k < ((i / 3) + 1) * 3; ++k)
{
for (int l = j / 3 * 3; l < ((j / 3) + 1) * 3; ++l)
{
if (i != k && j != l && board[i][j] == board[k][l]) {
return false;
}
}
}
}
}
return true;
}
그냥 정말 규칙대로 줄줄이 썼는데 생각보다 빨라서 당황했다..
뭔가 좀 더 멋진 코드같은게 있을거 같은데..
풀고나서 다른 사람의 풀이를 보고 났더니 있었다.
중복되는 숫자가 있으면 안되니까 lookup 테이블을 만들어서 푸는 방법도 있더라... 역시 아는건데도 안떠오른다
320x100
'코딩테스트 준비 > leetcode' 카테고리의 다른 글
113. Path Sum II [Medium] (0) | 2021.06.14 |
---|---|
1775. Equal Sum Arrays With Minimum Number of Operations [Medium] (0) | 2021.06.14 |
101. Symmetric Tree [Easy] (0) | 2021.06.12 |
1796. Second Largest Digit in a String [Easy] (0) | 2021.06.12 |
1753. Maximum Score From Removing Stones [Medium] (0) | 2021.06.12 |