-
[문제풀이 후기] 프로그래머스 #181832 - 정수를 나선형으로 배치하기문제풀이/Programmers 2026. 1. 7. 15:34
https://school.programmers.co.kr/learn/courses/30/lessons/181832
기본 상위 코드
const n = 5;첫 번째 시도 (결과 : 성공)
접근 방식
1. 최종 결과 배열 (n * n) 생성 후 0 으로 초기화
2. 나선형 (→ ↓ ← ↑) 로직이 동작할 상하좌우 최소/최대 좌표를 변수로 선언
3. 각 좌표 이동 로직을 선언
- 좌표를 이동하며, 각 좌표에 num++ 값을 입력
4. 각 로직이 완료된 이후, 나선형 로직의 동작 좌표 최소/최대값을 하나씩 ++ / --
5. 최종적으로 num 이 n * n 이 될 때까지 계속해서 나선형 로직 반복let [left, top] = [0, 0]; // 좌표 최소값 (좌측, 상단) let [right, bottom] = [n - 1, n - 1]; // 좌표 최대값 (우측, 하단) let num = 1; // 입력할 숫자 // 최종 배열 (n * n) let result = Array.from({ length: n }, () => Array.from({ length: n }, () => 0) ); // 최종 숫자까지 반복 while (num <= n * n) { // NOTE - 상단 행 채우기 (왼쪽 -> 오른쪽) for (let i = left; i <= right; i++) { result[top][i] = num++; } // 다 채운 뒤 상단 좌표 최소값++ top++; // NOTE - 우측 열 채우기 (위쪽 -> 아래쪽) for (let i = top; i <= bottom; i++) { result[i][right] = num++; } // 다 채운 뒤 우측 좌표 최대값-- right--; // NOTE - 하단 행 채우기 (오른쪽 -> 왼쪽) for (let i = right; i >= left; i--) { result[bottom][i] = num++; } // 다 채운 뒤 하단 좌표 최대값-- bottom--; // NOTE - 좌측 열 채우기 (아래쪽 -> 위쪽) for (let i = bottom; i >= top; i--) { result[i][left] = num++; } // 다 채운 뒤 좌측 좌표 최소값++ left++; // 한 바퀴 순환한 뒤 다시 처음부터 순환 } return result;후기
유난히 정답률이 낮던데, 낮은 이유가 확실히 있다.
쉽게 풀 수 있는 공식이 존재할 줄 알았지만, 결국엔 내가 직접 나선형 이동 로직을 하나하나 구현해야 하는 거였다.
이 문제 해결의 실마리는 당연 나선형 로직의 동작 좌표 최소/최대값 컨트롤 (일명 '벽 컨트롤') 이었는데, 이 개념까지 접근하는 게 어려웠다보니 문제를 푸는데 오랜 시간이 걸렸다.
.........쉽지 않다.'문제풀이 > Programmers' 카테고리의 다른 글
[문제풀이 후기] 프로그래머스 #120831 - 짝수의 합 (0) 2026.01.09 [문제풀이 후기] 프로그래머스 #120808 - 분수의 덧셈 (0) 2026.01.07 [문제풀이 후기] 프로그래머스 #181854 - 배열의 길이에 따라 다른 연산하기 (0) 2026.01.02 [문제풀이 후기] 프로그래머스 #181860 - 빈 배열에 추가, 삭제하기 (0) 2026.01.02 [문제풀이 후기] 프로그래머스 #181916 - 주사위 게임 3 (0) 2025.12.26