패턴이 패턴이 아니게 될 때: 나의 Spiral (Snail) Matrix와의 전투

발행: (2026년 2월 6일 오전 01:06 GMT+9)
6 min read
원문: Dev.to

Source: Dev.to

1 2 3
8 9 4
7 6 5

내 뇌가 멈춘 곳

80개가 넘는 패턴 문제를 JavaScript 루프로 풀면서, 내 뇌는 (또는 망가졌는지) 모든 것을 다음과 같이 보게 훈련되었다:

  • 수학 기반
  • 루프 기반
  • ij 조작
  • 별, 숫자, 대칭

삼각형, 뒤집힌 삼각형, 피라미드, 모래시계, 나비, 빈 패턴… 이름이 있으면 아마 출력했을 것이다.

그래서 이 문제가 나왔을 때, 내 뇌는 자동으로 수학 공식을 강제로 끌어내려 했다. 나는 계속 이런 질문을 던졌다:

  • ij를 어떻게 조작하지?
  • 루프 조건을 바꿀 수 있을까?
  • 이 뒤에 어떤 마법 같은 방정식이 있을까?

실수는 내가 이것을 행과 열, 즉 매트릭스로 보지 않았다는 것이었다. 일반적인 패턴 문제처럼 다루려 했지만 전혀 협조하지 않았다.

모든 것을 바꾼 사고 전환

돌파구는 더 많은 루프에서 온 것이 아니다. 문제를 보는 방식을 바꾸면서 찾아왔다.

이것은 패턴 문제가 아니라 패턴으로 위장된 매트릭스 순회 문제였다.
출력을 2‑D 격자로 취급하기 시작하니 점점 이해가 되었다. 완전한 해답을 바로 보지는 못했지만 적어도 방향은 잡혔다.

공식이 아닌 경계에서 생각하기

위치를 계산하려 애쓰는 대신, 아이디어는 간단했다:

  1. 매트릭스를 레이어별로 채운다.
  2. 네 방향으로 이동한다:
    • 왼쪽 → 오른쪽
    • 위 → 아래
    • 오른쪽 → 왼쪽
    • 아래 → 위
  3. 각 패스가 끝날 때마다 경계를 좁힌다.

top, bottom, left, right 변수는 현재 레이어를 정의한다.

결국 작동한 코드

let n = 3;

let matrix = Array.from({ length: n }, () => Array(n).fill(0));

let num = 1;

// Boundaries
let top = 0,
    bottom = n - 1;
let left = 0,
    right = n - 1;

while (num = left; i--) {
        matrix[bottom][i] = num++;
    }
    bottom--;

    // bottom → top
    for (let i = bottom; i >= top; i--) {
        matrix[i][left] = num++;
    }
    left++;
}

// Print result
for (let row of matrix) {
    console.log(row.join(' '));
}

여기서 실제로 일어나는 일 (쉽게 말하면)

  • num은 1부터 n * n까지 증가한다.
  • top, bottom, left, right는 현재 레이어를 정의한다.
  • 각 내부 루프는 나선형의 한 면을 채운다.
  • 면을 채운 뒤 해당 경계를 안쪽으로 이동한다.
  • while 루프는 매트릭스가 가득 찼을 때 정확히 멈춘다.

공식도, 패턴 트릭도 없이—그저 제어된 이동일 뿐이다.

Array.from()에 관해서

처음엔 매트릭스 값을 직접 입력했다. 나중에 다음과 같이 바꿨다:

let matrix = Array.from({ length: n }, () => Array(n).fill(0));

이 코드가 하는 일:

  1. n개의 행을 가진 외부 배열을 만든다.
  2. 각 행은 새로운 n 크기의 배열이다.
  3. 모든 셀을 0으로 채운다.

이렇게 하면 참조 문제를 방지할 수 있다(행마다 독립적인 배열이 필요할 때 중요) 그리고 같은 로직을 3 × 3뿐 아니라 어떤 크기에도 적용할 수 있다.

진짜 교훈 (코드가 아니라)

때때로 문제 자체가 어려운 것이 아니라, 당신의 사고 모델이 틀렸기 때문이다.

나는 루프를 몰라서 실패한 것이 아니다. 문제를 맞지 않는 형태에 억지로 끼워 넣으려다 실패한 것이다. 패턴으로 보지 않고 매트릭스 순회로 바라보니 모든 것이 맞물렸다.

과도하게 설명하기 전에 마무리

나는 아직 이 분야가 새롭다. 이 질문이 나를 똑똑하게 만든 건 아니다; 오히려 막히게 만들었다가 안도감을 줬다. 이 패턴에 어려움을 겪고 있다면 혼자가 아니다. 혼란스러운 일이다—하지만 결국은 그렇지 않다.

Back to Blog

관련 글

더 보기 »