Developer. Designer

프로그래머스 기초트레이닝 Day25-1

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

양의 정수 n이 매개변수로 주어집니다.
n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.

※ 제한 사항
1 ≤ n ≤ 30

입출력

n result
4 [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]
5 [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]


function solution(n) {
  // n x n 배열 초기화
  var answer = new Array(n);
  for (var i = 0; i < n; i++) {
    answer[i] = new Array(n);
  }

  var num = 1; // 배열에 넣을 숫자 초기값

  // 배열 채우기
  var top = 0,
    bottom = n - 1,
    left = 0,
    right = n - 1;
  while (top <= bottom && left <= right) {
    // 위쪽 행 채우기
    for (var i = left; i <= right; i++) {
      answer[top][i] = num++;
    }
    top++;

    // 오른쪽 열 채우기
    for (var i = top; i <= bottom; i++) {
      answer[i][right] = num++;
    }
    right--;

    // 아래쪽 행 채우기
    for (var i = right; i >= left; i--) {
      answer[bottom][i] = num++;
    }
    bottom--;

    // 왼쪽 열 채우기
    for (var i = bottom; i >= top; i--) {
      answer[i][left] = num++;
    }
    left++;
  }

  return answer;
}

var answer = new Array(n) 및 for 루프: answer라는 이름의 2차원 배열을 만듭니다. 각 행에 대한 배열을 만들어 answer 배열에 할당합니다.

var num = 1: 배열에 넣을 숫자의 초기값을 1로 설정합니다.

var top = 0, bottom = n - 1, left = 0, right = n - 1: 배열의 가장자리를 나타내는 변수들을 초기화합니다.

while 루프: 배열을 나선 모양으로 숫자를 채우기 위해 가장자리에서부터 안쪽으로 이동합니다.

for 루프 1: 위쪽 행을 왼쪽에서 오른쪽으로 채웁니다.
for 루프 2: 오른쪽 열을 위에서 아래로 채웁니다.
for 루프 3: 아래쪽 행을 오른쪽에서 왼쪽으로 채웁니다.
for 루프 4: 왼쪽 열을 아래에서 위로 채웁니다.
각 루프에서 숫자 num은 1씩 증가하며 배열의 해당 위치에 할당됩니다.

가장자리를 나선 방향으로 이동하면서 숫자를 할당하고 나면, 가장자리의 범위를 조절하여 안으로 이동합니다. 이를 가장자리 범위가 교차할 때까지 반복합니다.

함수는 최종적으로 나선 모양으로 채워진 2차원 배열인 answer를 반환합니다.

이 함수를 호출하면 주어진 숫자 n에 따라 나선 모양으로 채워진 2차원 배열이 반환됩니다.