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 를 다시 확인해야 한 줄짜리 행렬에서 같은 칸을 두 번 담지 않아요.javascriptCopy codefunction 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;}
이전 문제카펫 만들기
다음 문제영단어를 숫자로 바꾸기
예시 테스트만 실행 (Cmd/Ctrl+Enter)
숨김 테스트까지 채점 (Cmd/Ctrl+Shift+Enter)
에디터를 불러오고 있어요…
코드를 작성하고Ctrl↵를 눌러 예시 테스트를 확인해 보세요.