📕 문제 설명
양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
⭐ 제한사항
- 1 ≤ n ≤ 30
💻 입출력 예
n | result |
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
- 예제 1번의 n의 값은 4로 4 × 4 배열에 다음과 같이 1부터 16까지 숫자를 채울 수 있습니다.
행 \ 열 | 0 | 1 | 2 | 3 |
0 | 1 | 2 | 3 | 4 |
1 | 12 | 13 | 14 | 5 |
2 | 11 | 16 | 15 | 6 |
3 | 10 | 9 | 8 | 7 |
따라서 [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]를 return 합니다.
입출력 예 #2
- 예제 2번의 n의 값은 5로 5 × 5 배열에 다음과 같이 1부터 25까지 숫자를 채울 수 있습니다.
행 \ 열 | 0 | 1 | 2 | 3 | 4 |
0 | 1 | 2 | 3 | 4 | 5 |
1 | 16 | 17 | 18 | 19 | 6 |
2 | 15 | 24 | 25 | 20 | 7 |
3 | 14 | 23 | 22 | 21 | 8 |
4 | 13 | 12 | 11 | 10 | 9 |
따라서 [[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]]를 return 합니다.
😊 나의 답변
function solution(n) {
let arr = Array.from({ length : n }, () => Array(n).fill(0)) // n x n 이차원 배열 생성
let row = 0, col = 0; // 행, 열 0부터 시작
let number = 1; // 삽입할 숫자
for(let i = n; i > 0; i -= 2) {
//오른쪽으로
for(let j = 0; j < i; j++) {
arr[row][col] = number;
col++;
number++;
}
col--;
row++;
//아래로
for(let j = 0; j < i - 1; j++) {
arr[row][col] = number;
row++;
number++;
}
col--;
row--;
//왼쪽으로
for(let j = 0; j < i - 1; j++) {
arr[row][col] = number;
col--;
number++;
}
col++;
row--;
//위로
for(let j = 0; j < i - 2; j++) {
arr[row][col] = number;
row--;
number++;
}
col++;
row++;
}
return arr;
}
🤦♀️ 진짜 문제 구조 이해하는 데 머리 좀 썼다.
노가다로도 찍어보고 여러가지 방법 다 해본 문제
이렇게 적어가면서 이해하려고 노력했다... 🤣
최대한 다른 답변 안보고 하려고 했고, 메서드 정리해놓은 것들 참고하면서 풀이해봤지만 실패.
역시 정답률 최하위 문제인가........!
결국 for문 중첩해서 풀어부렸다.
728x90
반응형
'프로그래머스 > Lv. 0 코딩 기초 트레이닝' 카테고리의 다른 글
[프로그래머스] 코딩 기초 트레이닝 124문제 풀이 완료! (0) | 2023.08.09 |
---|---|
[프로그래머스] Lv.0 정사각형으로 만들기 / JS (0) | 2023.08.08 |
[프로그래머스] Lv.0 그림 확대 / JS (0) | 2023.08.08 |
[프로그래머스] Lv.0 두 수의 합 / JS (0) | 2023.08.07 |
[프로그래머스] Lv.0 배열의 원소 삭제하기 / JS (0) | 2023.08.06 |