Skip to content

Commit cfad11b

Browse files
committed
issue #42 2580 스도쿠
1 parent 3b98755 commit cfad11b

File tree

2 files changed

+116
-0
lines changed

2 files changed

+116
-0
lines changed

src/backjoon/_2580.java

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
package backjoon;
2+
// https://www.acmicpc.net/problem/2580
3+
4+
import java.io.BufferedReader;
5+
import java.io.IOException;
6+
import java.io.InputStreamReader;
7+
import java.util.StringTokenizer;
8+
9+
public class _2580 {
10+
11+
public static int[][] arr = new int[9][9]; //스도쿠 판
12+
13+
public static void main(String[] args) throws IOException {
14+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
15+
//sol memory 19172 runtime 388
16+
for (int i = 0; i < 9; i++) {
17+
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
18+
for (int j = 0; j < 9; j++) {
19+
arr[i][j] = Integer.parseInt(st.nextToken());
20+
}
21+
}
22+
23+
sudoku(0, 0);
24+
}
25+
26+
public static void sudoku(int row, int col) {
27+
// 해당 행이 다 채워진 경우 다음행으로 가기
28+
if (col == 9) {
29+
sudoku(row + 1, 0);
30+
return;
31+
}
32+
33+
// 행과 열이 다 채워진 경우 스도쿠 판 출력하기
34+
if (row == 9) {
35+
StringBuilder sb = new StringBuilder();
36+
for (int i = 0; i < 9; i++) {
37+
for (int j = 0; j < 9; j++) {
38+
sb.append(arr[i][j]).append(" ");
39+
}
40+
sb.append("\n");
41+
}
42+
System.out.println(sb);
43+
// 스도쿠 판을 채우는 방법이 여럿인 경우는 그 중 하나만을 출력하기 위해서 시스템 종료
44+
System.exit(0);
45+
}
46+
47+
// 만약 해당 위치가 0 이라면 1부터 9까지 중 가능한 수 탐색
48+
if (arr[row][col] == 0) {
49+
for (int i = 1; i <= 9; i++) {
50+
// i 값이 중복되지 않는지 검사
51+
if (possibility(row, col, i)) {
52+
arr[row][col] = i;
53+
sudoku(row, col + 1);
54+
}
55+
}
56+
arr[row][col] = 0;
57+
return;
58+
}
59+
60+
sudoku(row, col + 1);
61+
62+
}
63+
64+
public static boolean possibility(int row, int col, int value) {
65+
// 같은 행 검사
66+
for (int i = 0; i < 9; i++) {
67+
if (arr[row][i] == value) {
68+
return false;
69+
}
70+
}
71+
72+
// 같은 열 검사
73+
for (int i = 0; i < 9; i++) {
74+
if (arr[i][col] == value) {
75+
return false;
76+
}
77+
}
78+
79+
// 3*3 칸 검사
80+
int set_row = (row / 3) * 3; // value가 속한 3x3의 행의 첫 위치
81+
int set_col = (col / 3) * 3; // value가 속한 3x3의 열의 첫 위치
82+
83+
for (int i = set_row; i < set_row + 3; i++) {
84+
for (int j = set_col; j < set_col + 3; j++) {
85+
if (arr[i][j] == value) {
86+
return false;
87+
}
88+
}
89+
}
90+
return true; // 중복되는 것이 없을 경우 true 반환
91+
}
92+
}
93+
/*
94+
INPUT
95+
0 3 5 4 6 9 2 7 8
96+
7 8 2 1 0 5 6 0 9
97+
0 6 0 2 7 8 1 3 5
98+
3 2 1 0 4 6 8 9 7
99+
8 0 4 9 1 3 5 0 6
100+
5 9 6 8 2 0 4 1 3
101+
9 1 7 6 5 2 0 8 0
102+
6 0 3 7 0 1 9 5 2
103+
2 5 8 3 9 4 7 6 0
104+
105+
OUTPUT
106+
1 3 5 4 6 9 2 7 8
107+
7 8 2 1 3 5 6 4 9
108+
4 6 9 2 7 8 1 3 5
109+
3 2 1 5 4 6 8 9 7
110+
8 7 4 9 1 3 5 2 6
111+
5 9 6 8 2 7 4 1 3
112+
9 1 7 6 5 2 3 8 4
113+
6 4 3 7 8 1 9 5 2
114+
2 5 8 3 9 4 7 6 1
115+
*/

src/backjoon/_9663.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class _9663 {
1212
public static int count = 0;
1313

1414
public static void main(String[] args) throws IOException {
15+
// memory 12052 runtime 5728
1516
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
1617
N = Integer.parseInt(br.readLine());
1718
arr = new int[N];

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy