[알고리즘문제풀기] 정수를 나선형으로 배치하기

silver's avatar
May 20, 2025
[알고리즘문제풀기] 정수를 나선형으로 배치하기

문제

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

silver