[ Solution ]
package implement1913;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int find = Integer.parseInt(br.readLine());
solve(n, find);
}
static void solve(int n, int find) {
int [][] map = new int[n][n];
int value = 1;
int x = n/2;
int y = n/2;
int limit = 1;
while(true) {
for(int i = 0; i < limit; i++) {
map[y--][x] = value++;
}
if(value-1 == n*n) break;
for(int i = 0; i < limit; i++) {
map[y][x++] = value++;
}
limit++;
for(int i = 0; i < limit; i++) {
map[y++][x] = value++;
}
for(int i = 0; i < limit; i++) {
map[y][x--] = value++;
}
limit++;
}
StringBuilder sb = new StringBuilder();
int findx = 0;
int findy = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n ; j++) {
if(find == map[i][j]) {
findy = i + 1;
findx = j + 1;
}
sb.append(map[i][j] + " ");
}
sb.append("\n");
}
sb.append(findy + " " + findx);
System.out.println(sb.toString());
}
}
이 문제는 구현을 어떻게 잘 하느냐가 중요한 문제 같아 보인다.
나는 안에서 밖으로 도는 방식을 선택해서 구현했는데 ,, 그림을 그려보면 패턴을 쉽게 파악할 수 있다.
안에서 밖으로 돌면서 이동하는 칸의 개수에서 패턴이 보이는데, 이를 반복문으로 구현해주면 된다.