Tags
- DP
- dfs
- ์ ์๋ก
- CodingTest
- SpringBoot
- ๋ฐฑํธ๋ํน
- ๊ทธ๋ํ ํ์
- Dynamic Programming
- Study
- ๊ตฌํ
- ๋๋น ์ฐ์ ํ์
- PGM
- LV2
- ์๋ฎฌ๋ ์ด์
- ์ํ
- ๋ฌธ์์ด
- sort
- BFS
- ์๋ฃ๊ตฌ์กฐ
- stack
- ๊น์ด ์ฐ์ ํ์
- ๊ต์ฌ
- BOJ
- Brute Force Algorithm
- ์ ๋ ฌ
- Python
- ๊ทธ๋ํ ์ด๋ก
- Java
- queue
- greedy
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_2580 : ์ค๋์ฟ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- 9x9 ์ค๋์ฟ ๋ฌธ์ ๊ฐ ์ฃผ์ด์ง๋ฉด, ๋น์นธ์ ์ฑ์์ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- ์ค๋์ฟ ๊ท์น์ ๋ฐ๋ผ ๊ฐ๋ก, ์ธ๋ก, ์ ์ฌ๊ฐํ์ ๊ฒน์น๋ ์ซ์๊ฐ ์๋๋ก ์ซ์๋ฅผ ์ฑ์๊ฐ์ผ ํ๋ค.
- ๋ง์ฝ ์ซ์๋ฅผ ๋์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๋ฉด, ์ง์ ์ ๋จ๋ ์ซ์๋ฅผ ์ทจ์ํ๊ณ ๋ค์ ๋์ ๋ณด์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฐฑํธ๋ํน์ด ํ์ํ๋ค.
- ๋ฐฑํธ๋ํน์์ ๊ฐ๋ก, ์ธ๋ก, ์ ์ฌ๊ฐํ์ ๊ฒน์น๋ ์ซ์๊ฐ ์๋์ง์ ๋ํ ์ํ ์ ๋ณด๋ ํ์ํ๋ค.
- ์ซ์๋ฅผ ์ฑ์๊ฐ๋ฉฐ ๋ง์ง๋ง ์นธ๊น์ง ์ฑ์ฐ๋๋ฐ ์ฑ๊ณตํ๋ฉด, ํ์ฌ ์ํ๋ฅผ ์ถ๋ ฅํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.StringTokenizer;
public class Main {
private static final int size = 9;
private static int[][] sdoku;
private static boolean[][] row, col, square;
private static int getSquare(int row, int col) {
return (row / 3 * 3 + col / 3);
}
private static boolean game(int z) {
if (z == 81) {
return true;
}
int r = z / size;
int c = z % size;
if (sdoku[r][c] != 0) {
return game(z + 1);
} else {
for (int i = 1; i <= 9; i++) {
if (!row[r][i] && !col[c][i] && !square[getSquare(r, c)][i]) {
row[r][i] = col[c][i] = square[getSquare(r, c)][i] = true;
sdoku[r][c] = i;
if (game(z + 1)) {
return true;
}
sdoku[r][c] = 0;
row[r][i] = col[c][i] = square[getSquare(r, c)][i] = false;
}
}
}
return false;
}
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = null;
sdoku = new int[size][size]; // ์ค๋์ฟ ์ ์ ํ ์ซ์
row = new boolean[size][size + 1]; // ํ์ ๋์จ ์ซ์ ํ์ธ
col = new boolean[size][size + 1]; // ์ด์ ๋์จ ์ซ์ ํ์ธ
square = new boolean[size][size + 1]; // ์ ์ฌ๊ฐํ์ ๋์จ ์ซ์ ํ์ธ
for (int i = 0; i < size; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < size; j++) {
sdoku[i][j] = Integer.parseInt(st.nextToken());
row[i][sdoku[i][j]] = true;
col[j][sdoku[i][j]] = true;
square[getSquare(i, j)][sdoku[i][j]] = true;
}
}
// ๋ฐฑํธ๋ํน
game(0);
// Output
StringBuilder sb = new StringBuilder();
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
sb.append(sdoku[i][j]).append(' ');
}
sb.append('\n');
}
bw.write(sb.toString());
bw.flush();
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ์ค๋์ฟ ๊ฒ์ํ ์ํ๋ฅผ intํ ์ด์ค๋ฐฐ์ด sdoku์ ๊ธฐ๋กํด๊ฐ๋ฉฐ ํ์ดํ๋ค.
- ๊ฐ๋ก, ์ธ๋ก, ์ ์ฌ๊ฐํ์ ๋ํ๋ ์ซ์๋ฅผ ์ฒดํฌํ๊ธฐ ์ํด boolean ์ด์ค๋ฐฐ์ด row, col, sqaure๋ฅผ ์ฌ์ฉํ๋ค.
- ์ฌ๊ท ๋ฉ์๋ game() ์์ ๋ฐฑํธ๋ํน์ ํตํด ์ค๋์ฟ ๋ฅผ ํ๋ ์ดํ๋ค.
- ์ค๋์ฟ ์นธ์ ๋ฒํธ z๋ฅผ ๋๊ฒจ 81๊ฐ์ ์นธ์ ๋ชจ๋ ์ฑ์ฐ๋๋ฐ ์ฑ๊ณตํ๋ฉด true๋ฅผ ๋ฐํํ๋ค.
- z๋ฅผ ์ค๋์ฟ ํ๋ณ์ ๊ธธ์ด size๋ก ๋๋๊ฑฐ๋ ๋ชซ์ ๊ตฌํด ์ขํ๋ฅผ ๊ตฌํ๋ค.
- ๋ง์ฝ ์ซ์๊ฐ ์ฑ์์ ธ์์ผ๋ฉด ๋์ด๊ฐ๊ณ , ๋น์นธ(0)์ด๋ฉด 1๋ถํฐ 9๊น์ง ํ๋์ฉ ์ฑ์๋ณธ๋ค.
- ์ซ์๋ฅผ ์ฑ์ธ ๋, ๊ฐ๋ก / ์ธ๋ก / ์ ์ฌ๊ฐํ์ ๊ฒน์น๋ ์ซ์๊ฐ ์๋์ง ํ์ธํ๋ค.
- ๋ฑ์ฅํ ์ซ์๋ก ์ฒดํฌํด์ฃผ๊ณ , z+1๋ก game์ ๋ค์ ์ฌ๊ทํ๋ค.
- ๋ง์ฝ ๋ชจ๋ ํ์์ ์คํจํ๋ค๋ฉด, ํ์ฌ ์นธ์ 0์ผ๋ก ๋ค์ ๋น์์ฃผ๊ณ , ๋ฑ์ฅํ ์ซ์์์๋ ์ง์์ค ๋ค false๋ฅผ ๋ฐํํ๋ค.
- game() ๋ฉ์๋์ ๋ชจ๋ ์ฌ๊ท๊ฐ ๋ง๋ฌด๋ฆฌ ๋ ๋ค, sdoku ๋ฐฐ์ด์ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ๋ฌธ์ ์ค๋ช ์ 12095 : ๊ฐ์ฅ ์ค๋ ๊ฑธ๋ฆฌ๋ ์ค๋์ฟ ๋ฌธ์ ์ ์์ค๋ก ํ ์ ์๋ ์ ๋ ฅ๋ง ์ฃผ์ด์ง๋ค๊ธธ๋, ์ฐพ์๊ฐ๋ณด๋ ์ ๋ต ์ฝ๋๊ฐ ์์๋ค... ๋ฌธ์ ๋ฅผ ํ๊ธฐ๋ ์ ์ ์คํฌ๋นํ๋๋ฐ, ์ข์ ์์ ์ฝ๋๋ฅผ ๋ณด๊ณ ํด๋ก ์ฝ๋ฉ ํ๋ฏ ํ์ดํด ๋ณด์๋ค.
- ํ์ด ์๋ฆฌ ์์ฒด๋ ๋ฐฑํธ๋ํน์ ๊ตฌํํ๋๊ฑฐ๋ผ ๊ฐ๋จํ๋ค. ์ฐ๊ณ๋๋ 12095 ๋ฌธ์ ๋ ๋ค์์ ๊ผญ ํ์ด๋ณด๋๋ก ํ์.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_14499 : ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2024.04.26 |
---|---|
BOJ_1976 : ์ฌํ ๊ฐ์ (0) | 2024.04.22 |
BOJ_1707 : ์ด๋ถ ๊ทธ๋ํ (0) | 2024.04.13 |
BOJ_3190 : ๋ฑ (0) | 2024.04.11 |
BOJ_2143 : ๋ ๋ฐฐ์ด์ ํฉ (0) | 2024.04.10 |