안녕하세요
프로그래머스 JS [삼각 달팽이] array.flat() 배열평탄화 본문
삼각 달팽이
문제 설명
제한사항
입출력 예nresult
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 1,000 이하입니다.
입출력 예nresult
4 | [1,2,9,3,10,8,4,5,6,7] |
5 | [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] |
6 | [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11] |
코드설명 삼각형 배열을 만들고 const array = [];
for (let i = 1; i <= n; i++) {
array.push(new Array(i));
}
삼각형을 그리기 위한 3가지의 규칙이 반복됩니다. 1) n만큼 아래로 한칸씩 내려가기 2) n-1만큼 아래에서 한칸씩 오른쪽으로 가기 3) n-2만큼 오른쪽 아래에서 한칸씩 왼쪽 위로 가기 한 칸 이동할 때마다 1씩 더합니다. array[x][y] = count;
count++;
i가 규칙의 기준 역할을 하고, j가 카운트 역할을 합니다.. for (let i = 0; i < n; i++) {
for (let j = i; j < n; j++) {
ex) 4 1번규칙) 아래로 내려가며 1 if (i % 3 === 0) x++; 1 2 3 4 2번규칙) 오른쪽으로 else if (i % 3 === 1) y++; 1 2 3 4 5 6 7 3번규칙) 왼쪽 위로 else x--, y--; 1 2 9 3 8 4 5 6 7 다시 1번규칙) 아래로 if (i % 3 === 0) x++; 1 2 9 3 10 8 4 5 6 7 만들어진 배열을 [ [ 1 ], [ 2, 9 ], [ 3, 10, 8 ], [ 4, 5, 6, 7 ] ] arrayflat() 메서드로 평탄화합니다. return array.flat(); //[ 1, 2, 9, 3, 10, 8, 4, 5, 6, 7 ]
flat() 메서드의 인자는 평탄화하기 위한 배열의 깊이입니다. console.log([[1, [2, [3]]]].flat(3)); 배열이 세 번 감싸여 있다면 flat(3)으로 일차원 배열로 만들 수 있습니다. 모두 평탄화 시키기 위해선 Infinity 를 인자로 넣어주면 됩니다. array.flat(Infinity)
|
function solution(n) {
const array = [];
for (let i = 1; i <= n; i++) {
array.push(new Array(i));
}
let [count, x, y] = [1, -1, 0];
for (let i = 0; i < n; i++) {
for (let j = i; j < n; j++) {
if (i % 3 === 0) x++;
else if (i % 3 === 1) y++;
else x--, y--;
array[x][y] = count;
count++;
}
}
return array.flat();
}
solution(4);
|
'프로그래머스 > Lv.2' 카테고리의 다른 글
프로그래머스 JS [수식 최대화] (0) | 2022.12.21 |
---|---|
프로그래머스 JS [메뉴 리뉴얼]⭐⭐ 조합 (0) | 2022.12.15 |
프로그래머스 JS [큰 수 만들기] 탐욕법 (0) | 2022.12.14 |
프로그래머스 문제 복습할 내용 (0) | 2022.12.14 |
프로그래머스 JS [쿼드압축 후 개수 세기] 2^n좌표 4등분 (0) | 2022.12.14 |