Post

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

https://school.programmers.co.kr/learn/courses/30/lessons/181832

📔 문제 설명

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

💡 입출력 예

nresult
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]]

💻내가 작성한 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function solution(n) {
  let x = 0;
  let y = 0;
  let number = 1;
  var answer = Array.from(Array(n), () => Array(n).fill(0));

  for (let i = n; i > 0; i -= 2) {
    for (let j = 0; j < i; j++) {
      console.log("오른쪽", `[${y}][${x}] = ${number}`);
      answer[y][x] = number;
      number++;
      x++;
    }
    x--;
    y++;
    for (let j = 0; j < i - 1; j++) {
      console.log("아래", `[${y}][${x}] = ${number}`);
      answer[y][x] = number;
      number++;
      y++;
    }
    x--;
    y--;
    for (let j = 0; j < i - 1; j++) {
      console.log("왼쪽", `[${y}][${x}] = ${number}`);
      answer[y][x] = number;
      number++;
      x--;
    }
    x++;
    y--;
    for (let j = 0; j < i - 2; j++) {
      console.log("", `[${y}][${x}] = ${number}`);
      answer[y][x] = number;
      number++;
      y--;
    }
    x++;
    y++;
  }

  return answer;
}

코드 진행

구분반복1반복2
1.오른쪽으로 이동
(x++)
[0][0] = 1
[0][1] = 2
[0][2] = 3
[0][3] = 4

y = 4; x = 0;
[1][1] = 13
[1][2] = 14

y = 1; x = 3;
x,y 위치 변경y++; x–;y++; x–;
2.아래로 이동
(y++)
[1][3] = 5
[2][3] = 6
[3][3] = 7

y = 4; x = 3;
[2][2] = 15

y = 3; x = 2;
x,y 위치 변경x–; y–;x–; y–;
3.왼쪽으로이동
(x–)
[3][2] = 8
[3][1] = 9
[3][0] = 10

y = 3; x = -1;
[2][1] = 16
x,y 위치 변경x++; y–;x++; y–;
4.위로 이동
(y–)
[2][0] = 11
[1][0] = 12

y = 0; x = 0;
 
x,y 위치 변경x++; y++; 
This post is licensed under CC BY 4.0 by the author.