https://www.acmicpc.net/problem/2239
๋ฌธ์
์ค๋์ฟ ๋ ๋งค์ฐ ๊ฐ๋จํ ์ซ์ ํผ์ฆ์ด๋ค. 9×9 ํฌ๊ธฐ์ ๋ณด๋๊ฐ ์์ ๋, ๊ฐ ํ๊ณผ ๊ฐ ์ด, ๊ทธ๋ฆฌ๊ณ 9๊ฐ์ 3×3 ํฌ๊ธฐ์ ๋ณด๋์ 1๋ถํฐ 9๊น์ง์ ์ซ์๊ฐ ์ค๋ณต ์์ด ๋ํ๋๋๋ก ๋ณด๋๋ฅผ ์ฑ์ฐ๋ฉด ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์์ ๋ณด์.
์ ๊ทธ๋ฆผ์ ์ฐธ ์๋ ์ค๋์ฟ ํผ์ฆ์ ํผ ๊ฒฝ์ฐ์ด๋ค. ๊ฐ ํ์ 1๋ถํฐ 9๊น์ง์ ์ซ์๊ฐ ์ค๋ณต ์์ด ๋์ค๊ณ , ๊ฐ ์ด์ 1๋ถํฐ 9๊น์ง์ ์ซ์๊ฐ ์ค๋ณต ์์ด ๋์ค๊ณ , ๊ฐ 3×3์ง๋ฆฌ ์ฌ๊ฐํ(9๊ฐ์ด๋ฉฐ, ์์์ ์๊น๋ก ํ์๋์๋ค)์ 1๋ถํฐ 9๊น์ง์ ์ซ์๊ฐ ์ค๋ณต ์์ด ๋์ค๊ธฐ ๋๋ฌธ์ด๋ค.
ํ๋ค ๋ง ์ค๋์ฟ ํผ์ฆ์ด ์ฃผ์ด์ก์ ๋, ๋ง์ ๋๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
9๊ฐ์ ์ค์ 9๊ฐ์ ์ซ์๋ก ๋ณด๋๊ฐ ์ ๋ ฅ๋๋ค. ์์ง ์ซ์๊ฐ ์ฑ์์ง์ง ์์ ์นธ์๋ 0์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
9๊ฐ์ ์ค์ 9๊ฐ์ ์ซ์๋ก ๋ต์ ์ถ๋ ฅํ๋ค. ๋ต์ด ์ฌ๋ฌ ๊ฐ ์๋ค๋ฉด ๊ทธ ์ค ์ฌ์ ์์ผ๋ก ์์๋ ๊ฒ์ ์ถ๋ ฅํ๋ค. ์ฆ, 81์๋ฆฌ์ ์๊ฐ ์ ์ผ ์์ ๊ฒฝ์ฐ๋ฅผ ์ถ๋ ฅํ๋ค.
์ ํ
- 12095๋ฒ ๋ฌธ์ ์ ์๋ ์์ค๋ก ํ ์ ์๋ ์
๋ ฅ๋ง ์ฃผ์ด์ง๋ค.
- C++17: 180ms
- Java 15: 528ms
- PyPy3: 2064ms
ํ์ด
[๐๏ธ ICPC Sinchon Novice] - [BOJ][C++] ๋ฐฑ์ค 2580๋ฒ: ์ค๋์ฟ
์ ๊ฑฐ์ ๋์ผํ ๋ฌธ์ ..! ์ธ๋ฐ ์ด์ ์ธํ์ ์ฐ์๋ ์๋ก ๋ฐ๊ธฐ๋๋ฌธ์ char ๋ก ๋ฐ์์ int ๋ก ๋ณํํด์ ์ฐ์ฐํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
2580๊ณผ ๋์ผํ๊ฒ ํ์๋๋ฐ ํ๋ ธ๋ค๊ณ ๋จ๋ ๊ฒฝ์ฐ ์ถ๋ ฅ ํ์์ ์์ธํ ๋ณด์ !!
์ต์๊ฐ ๋๋ ํ๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ์ถ๋ ฅํด์ผํ๊ธฐ ๋๋ฌธ์ ๋น ์นธ ์ค ์ ์นธ๋ถํฐ ์ ์ ์๋ถํฐ ๋ฃ์ด๊ฐ๋ฉฐ ๋ฐฑํธ๋ํน์ ํด ๋๊ฐ์ผ ํ๋ค.
๋์ ๊ฒฝ์ฐ ๋น ์นธ์ ์์น๋ค์ ๋ฒกํฐ๋ก ๊ด๋ฆฌํ์ผ๋ ์ด์ค for๋ฌธ์ผ๋ก ์๋ถํฐ ๋ค๊น์ง ์ฐจ๋ก๋๋ก ๋์๋ ์๊ด ์๋ค (์๊ฐ ๋ณต์ก๋..๊ฐ ์ข ์ปค์ง๋ฟ)
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
typedef pair<int, int> ci;
vector<vector<int>> board(9, vector<int>(9,0));
vector<ci> blank; // ๋น ์นธ์ ์ขํ ์ ๋ณด๋ค
int blankNum;
bool row[10][10]; // col[x][y] = x๋ฒ์งธ ์ด์ y๋ผ๋ ์ซ์๊ฐ ์๋๊ฐ?
bool col[10][10];
bool box[10][10];
bool isFound = false;
void sudoku(int index) {
if(index == blankNum) {
for(int i=0; i<9; i++) {
for(int j=0; j<9; j++)
cout << board[i][j];
cout << "\n";
}
isFound = true;
return;
}
ci curPos = blank[index];
int x = curPos.first;
int y = curPos.second;
for(int i=1; i<=9; i++) {
if(row[x][i] || col[y][i] || box[(x/3)*3+(y/3)][i])
continue;
if(isFound)
return;
board[x][y] = i;
row[x][i] = col[y][i] = box[(x/3)*3+(y/3)][i] = true;
sudoku(index+1);
row[x][i] = col[y][i] = box[(x/3)*3+(y/3)][i] = false;
}
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
// ์ด๊ธฐํ
for(int i=0; i<9; i++)
for(int j=0; j<9; j++)
box[i][j] = col[i][j] = box[i][j] = false;
// ์
๋ ฅ
char ch; int input;
for(int i=0; i<9; i++) {
for(int j=0; j<9; j++) {
cin >> ch;
input = (int)ch - '0';
if(input==0)
blank.push_back({i,j});
board[i][j] = input;
row[i][input] = true;
col[j][input] = true;
box[(i/3)*3+(j/3)][input] = true;
}
}
blankNum = blank.size();
// ์ฐ์ฐ
sudoku(0);
return 0;
}
/*
*/
'๐ Baaaaaarking > 0x0C๊ฐ - ๋ฐฑํธ๋ํน' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ S2][C++] ๋ฐฑ์ค 6603๋ฒ: ๋ก๋ (0) | 2022.07.29 |
---|---|
[BOJ S3][C++] ๋ฐฑ์ค 15666๋ฒ : N๊ณผ M (12) (0) | 2022.07.21 |
[BOJ S3][C++] ๋ฐฑ์ค 15665๋ฒ: N๊ณผ M (11) (0) | 2022.07.21 |
[BOJ S3][C++] ๋ฐฑ์ค 15664๋ฒ: N๊ณผ M (10) (0) | 2022.07.21 |
[BOJ S3][C++] ๋ฐฑ์ค 15663๋ฒ : N๊ณผ M (9) (0) | 2022.07.19 |