문제 설명
양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
1 ≤ n ≤ 30
나의 코드
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
int topRow = 0;
int bottomRow = n-1;
int leftCol = 0;
int rightCol = n-1;
int num = 1;
while(num <= n*n) {
// 왼 -> 오 이동
for(int i=leftCol; i<=rightCol; i++) {
answer[topRow][i] = num++;
}
// 다음 행 이동
topRow++;
// 위 -> 아래 이동
for(int i=topRow; i<=bottomRow; i++) {
answer[i][rightCol] = num++;
}
// 다음 열 이동
rightCol--;
// 오 -> 왼 이동
for(int i=rightCol; i>=leftCol; i--) {
answer[bottomRow][i] = num++;
}
// 다음 행 이동
bottomRow--;
// 아래 -> 위 이동
for(int i=bottomRow; i>=topRow; i--) {
answer[i][leftCol] = num++;
}
// 다음 열 이동
leftCol++;
}
return answer;
}
}
느낀 점
시계방향 나선형으로 돌아가므로, topRow
, bottomRow
, leftCol
, rightCol
을 정하여 1
부터 n*n
까지 돌아가며 num
을 증가시키면서 넣어주면 되겠다. 알고리즘을 떠올리는 게 쉽지 않았고, 문제가 만났을 때 바로 나올 수 있도록 갈고 닦아야겠다.