백준 2580번 : 스도쿠 / C++
2023. 2. 19. 20:56ㆍ개인공부/코딩테스트
문제를 오늘안에 해결하고 싶었는데 해결을 했다! 몇가지 케이스에서는 정상적으로 작동했지만 예외를 찾는과정에서 이전의 벡터의 인덱스의 값을 초기화하지 않아 문제가 발생하였는데 초기화 코드를 작성하니 정상적으로 해결되었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
#include <iostream>
#include <vector>
using namespace std;
int sudoku[9][9] = {};
struct Pos
{
int COL;
int ROW;
};
vector<Pos> Blank;
void Print() {
// 결과 출력
for (int col = 0; col < 9; ++col)
{
for (int row = 0; row < 9; ++row)
{
cout << sudoku[col][row] << " ";
}
cout << endl;
}
}
bool CheckSudoku(int col, int row)
{
// 가로 확인
for (int i = 0; i < 9; ++i)
{
if ( i != col && sudoku[i][row] == sudoku[col][row])
return true;
}
// 세로 확인
for (int i = 0; i < 9; ++i)
{
if (i != row && sudoku[col][i] == sudoku[col][row])
return true;
}
// 네모칸 확인
int miniindex = (col % 3) * 3 + row % 3;
for (int i = 0; i < 9; ++i)
{
if (miniindex == i)
continue;
int icol = i / 3;
int irow = i % 3;
if (sudoku[col][row] == sudoku[(col / 3) * 3 + icol][(row / 3) * 3 + irow])
return true;
}
return false;
}
void SolveSudoku(int index)
{
// 스도쿠 칸이 모두 채워짐
if (index == Blank.size())
{
Print();
exit(0);
}
// 스도쿠 채우기
for (int i = 1; i < 10; ++i)
{
Pos now = Blank[index];
sudoku[now.COL][now.ROW] = i;
if (CheckSudoku(now.COL, now.ROW))
{
sudoku[now.COL][now.ROW] = 0;
continue;
}
SolveSudoku(index + 1);
sudoku[now.COL][now.ROW] = 0;
}
return;
}
int main()
{
// 입력
for (int col = 0; col < 9; ++col)
{
for (int row = 0; row < 9; ++row)
{
cin >> sudoku[col][row];
if (sudoku[col][row] == 0)
{
Pos pos{};
pos.COL = col;
pos.ROW = row;
Blank.push_back(pos);
}
}
}
SolveSudoku(0);
return 0;
}
|
cs |
'개인공부 > 코딩테스트' 카테고리의 다른 글
백준 14889번: 스타트와 링크 / C++ (0) | 2023.02.19 |
---|---|
백준 14888번 : 연산자 끼워넣기 (0) | 2023.02.19 |
백준 9663번: N-Queen / C++ (0) | 2023.02.19 |
백준 15652번 : N과 M(4) / C++ (0) | 2023.02.08 |
백준 15651번 : N과 M(3) /C++ (0) | 2023.02.08 |