코딩테스트 풀이/JAVA
[프로그래머스/Lv.0] 정수를 나선형으로 배치하기
무지맘
2023. 7. 4. 16:46
1 | 2 | 3 | 4 |
12 | 13 | 14 | 5 |
11 | 16 | 15 | 6 |
10 | 9 | 8 | 7 |
1. Input, Output, Example
- n × n 배열에 1부터 n^2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 반환
2. Constraint
1) 1 ≤ n ≤ 30
3. Code
class Solution {
public int[][] solution(int n) {
int[][] ans = new int[n][n];
int number = 1, x = 0, y = 0, change = 0;
while(number<=n*n){
switch(change%4){
case 0: // 오른쪽 방향으로 전진
ans[x][y++] = number++;
if(y==n || ans[x][y]!=0){ // 맨 오른쪽 or 다음 칸이 이미 방문한 곳이라면
y--; x++; // 아래쪽으로 방향 전환
change++;
} break;
case 1: // 아래쪽 방향으로 전진
ans[x++][y] = number++;
if(x==n || ans[x][y]!=0){ // 맨 아래 or 다음 칸이 이미 방문한 곳이라면
x--; y--; // 왼쪽으로 방향 전환
change++;
} break;
case 2: // 왼쪽 방향으로 전진
ans[x][y--] = number++;
if(y==-1 || ans[x][y]!=0){ // 맨 왼쪽 or 다음 칸이 이미 방문한 곳이라면
y++; x--; // 위쪽으로 방향 전환
change++;
} break;
default: // 위쪽 방향으로 전진
ans[x--][y] = number++;
if(x==-1 || ans[x][y]!=0){ // 맨 위쪽 or 다음 칸이 이미 방문한 곳이라면
x++; y++; // 왼쪽으로 방향 전환
change++;
}
}
}
return ans;
}
}
- +1