Day 25 이차원 리스트(배열)

Day 단계 2023-11-15

1. 정수를 나선형으로 배치하기

class Solution {
    public int[][] solution(int n) {
		int[][] answer = new int[n][n];
		
		int[] rightRange = {0, n-1};
		int[] downRange = {1, n-1};
		int[] leftRange = {n-2, 0};
		int[] upRange = {n-2, 1};
		
		int rigthrow = 0;
		int downcol = n-1;
		int leftrow = n-1;
		int upcol = 0;
		
		for (int i = 1; i <= n*n;) {
			for (int right = rightRange[0]; right <= rightRange[1]; right++) {
				if (i>n*n) break;
				answer[rigthrow][right] = i++;
				
			}
				if (rightRange[0]!=rightRange[1]) {
					rightRange[0]++; rightRange[1]--;
					rigthrow++; 
				}
				
			for (int down = downRange[0]; down <= downRange[1]; down++) {
				if (i>n*n) break;
				answer[down][downcol] = i++;
				
			}
				if (downRange[0]!=downRange[1]) {
					downRange[0]++; downRange[1]--;
					downcol--; 
				}
				
			for (int left = leftRange[0]; left >= leftRange[1]; left--) {
				if (i>n*n) break;
				answer[leftrow][left] = i++;
				
			}
				if (leftRange[0]!=leftRange[1]) {
					leftRange[0]--; leftRange[1]++;
					leftrow--; 
				}
				
			for (int up = upRange[0]; up >= upRange[1]; up--) {
				if (i>n*n) break;
				answer[up][upcol] = i++;
				
			}
				if (upRange[0]!=upRange[1]) {
					upRange[0]--; upRange[1]++;
					upcol++; 
				}
		}
        return answer;
    }
}
int[][] array = new int[n][n];
int num = 1;
int rowStart = 0;
int rowEnd = n - 1;
int colStart = 0;
int colEnd = n - 1;

while (rowStart <= rowEnd && colStart <= colEnd) {
	for (int i = colStart; i <= colEnd; i++) { // 오른쪽 이동 시 열의 범위에 영향받음
		array[rowStart][i] = num++; // 오른쪽으로 이동하며 채우기
	}
	rowStart++; // 다음 행 시작 위치 설정

	for (int i = rowStart; i <= rowEnd; i++) { // 아래쪽 이동 시 행의 범위에 영향받음
		array[i][colEnd] = num++; // 아래쪽으로 이동하며 채우기
	}
	colEnd--; // 다음 열 시작 위치 설정

	for (int i = colEnd; i >= colStart; i--) { // 왼쪽으로 이동 시 열의 범위에 영향받음
		array[rowEnd][i] = num++; // 왼쪽으로 이동하며 채우기
	}
	rowEnd--; // 다음 행 시작 위치 설정

	for (int i = rowEnd; i >= rowStart; i--) { // 위쪽으로 이동 시 행의 범위에 영향받음
		array[i][colStart] = num++; // 위쪽으로 이동하며 채우기
	}
	colStart++; // 다음 열 시작 위치 설정
}