[λ°±μ€(BOJ)] μ€λμΏ (2580) C++
λ¬Έμ : BOJ_2580λ² μ€λμΏ
μ μΆλ ₯ νμλ§ μ΄μ§ λ€λ₯Έ κ°μ λ¬Έμ λ‘ BOJ_2239λ² μ€λμΏ λ μμ΅λλ€.
λ¬Έμ μ€λͺ
λ°±νΈλνΉ, dfs
μμ±λμ§ μμ μ€λμΏ κ° μ£Όμ΄μ§κ³ , μ΄λ₯Ό μμ±νλ λ¬Έμ μ
λλ€.
μ€λμΏ μ μκ° νμ λμ§ μμ κ³³μ 0μΌλ‘ μ
λ ₯λμ΄ μκ³ , μ΄ 0λ€μ μ λΆ μ±μ΄ μ€λμΏ νμ μΆλ ₯ν΄μΌ ν©λλ€.
λ¬Έμ λ μ€νμ
μ μ§μ΄λ―λ‘, νλμ κ²½μ°κ° μλ μ¬λ¬ κ²½μ°κ° λ΅μ΄ λ μ μλ μ€λμΏ λ κ·Έμ€ νλλ₯Ό μΆλ ₯νλ©΄ μ λ΅ μ²λ¦¬κ° λ©λλ€.
dfsμ λ°±νΈλνΉμ μ΄μ©ν΄μΌ ν©λλ€.
Solution
μ
λ ₯ λ²νΈκ° 0μΈ κ³³μ μ’νλ€μ νλνλ μ μ₯ν©λλ€.
μ μ₯λ μ’νλ₯Ό νλμ© dfsλ‘ μνν©λλ€.
μ΄λ νμ¬ μν μ€μΈ κ³³μ λ§λ λ²νΈκ° μμΌλ©΄ λ€μ μνλ‘ μ§ννκ³ , 1~9 λͺ¨λ λ²νΈκ° λ€ μ€λ³΅λλ€λ©΄ μ΄μ μνλ‘ λμκ°μ λ€λ₯Έ μλ₯Ό μ
λ ₯νλ λ°±νΈλνΉ λ°©μμ μ¬μ©ν΄μΌ ν©λλ€.
0μΈ κ° μ’νλ₯Ό λλ©΄μ μ€λμΏ μ κ·μΉμ λ§κ² μ’νμ μΈλ‘μΆλ€, κ°λ‘μΆλ€μ μΈμ ν κ³³λ€μ λ²νΈλ₯Ό νμΈνμ¬ μ²΄ν¬ν©λλ€.
λν κ° μ’νκ° μν 3*3 μ¬μ΄μ¦μ μ¬κ°νλ μννλ©° λ²νΈλ₯Ό νμΈνκ³ μ²΄ν¬ν΄ μ£Όμ΄μΌ ν©λλ€.
Description
- 0μΈ κ° μ’νλ
vector<pair<int, int>> zeroPoint
λ₯Ό μ¬μ©ν΄ μ μ₯νμ΅λλ€. - dfsμ μΈμλ (μνν λ€μ xμ’ν, μνν λ€μ yμ’ν, μν νμ)λ‘ λ§λ€μμ΅λλ€.
- κ° μνλ§λ€
bool possible[10]
μ boolν λ°°μ΄μ λ§λ€μ΄μ κ°λ₯, λΆκ°λ₯ν μλ₯Ό 체ν¬νμ΅λλ€.
#include <iostream>
#include <vector>
using namespace std;
int map[10][10];
vector<pair<int, int>> zeroPoint;
int zeroPointCnt;
bool endSwc = false;
void dfs(int x, int y, int cnt) {
if (endSwc) return;
bool possible[10];
for (int i = 1; i <= 9; i++) possible[i] = true;
for (int i = 1; i <= 9; i++) {
if (y == i) continue;
possible[map[x][i]] = false;
}
for (int i = 1; i <= 9; i++) {
if (x == i) continue;
possible[map[i][y]] = false;
}
int xSt = 0;
if (x % 3 == 0) xSt = x - 3;
else xSt = x - (x % 3);
int ySt = 0;
if (y % 3 == 0) ySt = y - 3;
else ySt = y - (y % 3);
for (int i = xSt + 1; i <= xSt + 3; i++) {
for (int j = ySt + 1; j <= ySt + 3; j++) {
if (x == i && y == j) continue;
possible[map[i][j]] = false;
}
}
for (int i = 1; i <= 9; i++) {
if (possible[i]) {
if (cnt == zeroPointCnt) {
map[x][y] = i;
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
cout << map[i][j] << ' ';
}
cout << '\n';
}
endSwc = true;
return;
}
else {
map[x][y] = i;
dfs(zeroPoint[cnt].first, zeroPoint[cnt].second, cnt + 1);
map[x][y] = 0;
}
}
}
}
int main(void) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
cin >> map[i][j];
if (map[i][j] == 0) {
zeroPoint.push_back({ i,j });
zeroPointCnt++;
}
}
}
dfs(zeroPoint[0].first, zeroPoint[0].second, 1);
return 0;
}
'Algorithm > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] νλ²ν λ°°λ(12865) (0) | 2022.03.12 |
---|---|
[BOJ] μΈνμ μν(2098) (0) | 2022.03.11 |
[BOJ] λ°±μ‘°μ νΈμ(3197) (0) | 2022.03.10 |
[BOJ] νμ νκΈ°μ(1918) (0) | 2022.03.10 |
[BOJ] νμ΄μ λ°ν΄(2840) (0) | 2022.03.10 |