6주차 · 체크포인트 1
보통시뮬레이션배열

나선형 순회

n × m 정수 행렬 grid가 주어져요. 왼쪽 위에서 출발해 시계 방향으로 안쪽으로 감아 들어가며 읽은 순서대로 1차원 배열에 담아 반환해요.

행과 열의 개수가 다를 수 있고, 한 줄짜리 행렬도 들어와요.

경계를 네 개(위·아래·왼쪽·오른쪽)로 들고 한 줄 읽을 때마다 좁히는 방식이 가장 안전해요. 방향을 바꿀 때마다 이미 읽은 줄을 다시 읽지 않도록 조건을 넣는 것이 이 문제의 전부예요.

예시

예시 1
예시 2
예시 3

제한 사항

  • 1 ≤ n, m ≤ 200
  • 모든 행의 길이는 같아요.
  • -10^6 ≤ grid[i][j] ≤ 10^6
top, bottom, left, right 네 변수를 두고 → ↓ ← ↑ 순으로 한 줄씩 읽으며 안쪽으로 좁혀요. ← 와 ↑ 를 읽기 전에 top <= bottom, left <= right 를 다시 확인해야 한 줄짜리 행렬에서 같은 칸을 두 번 담지 않아요.
javascript
function spiralOrder(grid) {
const out = [];
let top = 0;
let bottom = grid.length - 1;
let left = 0;
let right = grid[0].length - 1;
while (top <= bottom && left <= right) {
for (let j = left; j <= right; j++) out.push(grid[top][j]);
top++;
for (let i = top; i <= bottom; i++) out.push(grid[i][right]);
right--;
if (top <= bottom) {
for (let j = right; j >= left; j--) out.push(grid[bottom][j]);
bottom--;
}
if (left <= right) {
for (let i = bottom; i >= top; i--) out.push(grid[i][left]);
left++;
}
}
return out;
}
에디터를 불러오고 있어요…
코드를 작성하고를 눌러 예시 테스트를 확인해 보세요.