문제
AI가 알려준 정답
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
// 오른쪽, 아래, 왼쪽, 위 (시계 방향)
int[] dx = {0, 1, 0, -1};
int[] dy = {1, 0, -1, 0};
int x = 0, y = 0; // 현재 위치
int dir = 0; // 현재 방향 인덱스 (0:오른쪽, 1:아래, 2:왼쪽, 3:위)
for (int num = 1; num <= n * n; num++) {
answer[x][y] = num; // 현재 칸에 숫자 채우기
// 다음 위치 미리 계산
int nx = x + dx[dir];
int ny = y + dy[dir];
// 경계 밖이거나 이미 채워진 칸이면 방향 전환
if (nx < 0 || nx >= n || ny < 0 || ny >= n || answer[nx][ny] != 0) {
dir = (dir + 1) % 4; // 방향을 시계방향으로 전환
nx = x + dx[dir];
ny = y + dy[dir];
}
// 위치 이동
x = nx;
y = ny;
}
return answer;
}
}
다른 사람들의 정답
lass Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
int num=1;
int start=0;
int end=n;
while(num <= n*n){
//->
for(int j=start;j<end;j++)
answer[start][j]=num++;
//v
for(int i=start+1;i<end;i++)
answer[i][end-1]=num++;
//<
for(int j=end-2;j>=start;j--)
answer[end-1][j]=num++;
//^
for(int i=end-2;i>start;i--)
answer[i][start]=num++;
start++;
end--;
}
return answer;
}
}
Share article