

1. 문제 풀이 아이디어
- 파일을 입력받고, 그 파일을 스도쿠 정답으로 변환하여 문제를 해결한다.
- 입력 파일은 모두 0으로 채워져 있으므로, 아무 정답이나 만들어서 문제를 해결하면 된다.
2. 나의 정답 코드
public class Main {
private static int n;
private static int[][] map;
public static void main(String[] args) throws IOException {
File inputFile = new File("05.in");
File outputFile = new File("05.out");
BufferedReader bufferedReader = new BufferedReader(new FileReader(inputFile));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(outputFile));
String line;
n = Integer.parseInt(bufferedReader.readLine());
map = new int[n * n][n * n];
for (int i = 0; i < n * n; i++) {
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
for (int j = 0; j < n * n; j++) {
map[i][j] = Integer.parseInt(stringTokenizer.nextToken());
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
fillMap(i, j);
}
}
for (int i = 0; i < n * n; i++) {
for (int j = 0; j < n * n; j++) {
bufferedWriter.write(map[i][j] + " ");
}
bufferedWriter.newLine();
}
bufferedWriter.close();
bufferedReader.close();
}
private static void fillMap(int x, int y) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int si = y * n;
int sj = (x * n + y * n) % (n * n);
int cur = (i * n + j + 1 + x * n - 1) % (n * n) + 1;
map[si + i][sj + (j + x) % n] = cur;
}
}
}
}
3. 정리
05.in
파일에서n
과map
배열을 읽어 저장한다.
n * n
크기만큼 반복하여fillMap
메서드를 사용해map
배열을 채운다.
fillMap
에서는 배열을 채울 때 각 작은 영역의 시작 위치si
,sj
를 계산하고, 그 위치에서 숫자들을 순차적으로 넣는다.
Share article