해당 문제는 여기에서 확인하실 수 있습니다.
import java.util.*;
import java.io.*;
public class Main {
static int N, A; // 배열 크기와 찾을 숫자를 저장하는 변수 선언
static int[][] arr; // 숫자를 담을 배열
static int[] dx = {1, 0, -1, 0}; // 오른쪽, 아래쪽, 왼쪽, 위쪽 순서로 이동하는데 사용할 x 좌표 변화량
static int[] dy = {0, 1, 0, -1}; // 오른쪽, 아래쪽, 왼쪽, 위쪽 순서로 이동하는데 사용할 y 좌표 변화량
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 입력을 받기 위한 BufferedReader 선언
StringBuilder sb = new StringBuilder(); // 출력을 위한 StringBuilder 선언
N = Integer.parseInt(br.readLine()); // 배열의 크기 입력
A = Integer.parseInt(br.readLine()); // 찾을 숫자 입력
arr = new int[N][N]; // 입력받은 크기로 배열 생성
int idx = 0; // 이동 방향을 나타내는 인덱스
int curX = 0; // 현재 x 좌표
int curY = 0; // 현재 y 좌표
arr[curX][curY] = N * N; // 배열의 오른쪽 아래 모서리부터 시작하여 큰 수부터 차례로 넣기
// 배열 안을 순회하면서 찾고자 하는 숫자 A를 찾을 때까지 반복
while (idx < 4) {
int nx = curX + dx[idx]; // 다음 x 좌표
int ny = curY + dy[idx]; // 다음 y 좌표
// 다음 좌표가 배열 범위 내에 있고, 아직 값이 할당되지 않은 경우
if (nx >= 0 && ny >= 0 && nx < N && ny < N && arr[nx][ny] == 0) {
arr[nx][ny] = arr[curX][curY] - 1; // 이동할 위치에 숫자 할당
// 만약 이동한 위치에 1이 들어간다면 탐색 종료
if (arr[nx][ny] == 1) break;
curX = nx; // 현재 x 좌표 업데이트
curY = ny; // 현재 y 좌표 업데이트
} else {
idx++; // 다음 방향 탐색을 위해 인덱스 증가
}
// 인덱스가 4를 초과하면 다시 처음 방향으로 되돌아가기
if (idx >= 4) {
idx = 0;
}
}
int ansX = 0, ansY = 0; // 찾은 숫자의 위치를 저장할 변수 초기화
// 배열을 순회하며 출력 및 찾은 숫자의 위치 저장
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (arr[i][j] == A) {
ansX = i + 1; // x 좌표는 1부터 시작하므로 1을 더해줌
ansY = j + 1; // y 좌표는 1부터 시작하므로 1을 더해줌
}
sb.append(arr[i][j] + " "); // 배열의 값을 StringBuilder에 추가
}
sb.append("\n"); // 한 행이 끝날 때마다 개행
}
sb.append(ansX + " " + ansY); // 찾은 숫자의 위치를 StringBuilder에 추가
System.out.println(sb); // 결과 출력
}
}