- for문을 이용하기
let arr = new Array(5); for (let i = 0; i < arr.length; i++) { arr[i] = new Array(2); } // 빈 공간의 2차원배열 만들기 // [[empty,empty],[empty,empty],[empty,empty],[empty,empty],[empty,empty]]
- ES6문법 Array.from() 메소드를 이용
const arr1 = Array.from(Array(5), () => new Array(2)); // 빈 공간의 2차원배열 만들기 // [[empty,empty],[empty,empty],[empty,empty],[empty,empty],[empty,empty]] const arr2 = Array.from(Array(5), () => Array(2).fill(null)); // null이 들어있는 2차원배열 만들기 // [[null,null],[null,null],[null,null],[null,null],[null,null]]
let matrix = new Array(max + 1).fill(0).map((el) => new Array(max + 1).fill(0));
2차원배열 만들기
let matrix = new Array(max + 1).fill(0).map((el) => new Array(max + 1).fill(0));
이차원배열 뿌셔버리기
이중반복으로 만들어지는 이차원배열.... 이걸 머리써서 생각하려고하니 벌써부터 어지러워진다.
아무리 머리를 짜내서 짜보려고해도 머리만 아프고 진전이 없다.
나는 그래서 이차원배열만을 정리 해놓고 조건에 따라 만드는 모든 방법들을 외워버려야겠다고 생각했다.
먼저, 2차원 배열을 만드는 법부터 알아보자.
내가 자주 사용하는 공식,
let matrix = Array.from(Array(arr.length), () => Array(arr.length).fill(0)); // [[0,0,0,0,0], // [0,0,0,0,0], // [0,0,0,0,0], // [0,0,0,0,0], // [0,0,0,0,0]]
문제마다 푸는 방식이 다르겠지만, 인접행렬이나 그래프문제를 풀 때는 배열의 해당 인덱스에 0,1을 할당하는 방식으로 접근한다.
알고리즘 문제를 풀다가, 이 배열을 회전해서 풀면 더 쉽겠는데? 라는 생각에서 시작하여, 직접 로직을 짜보려다가 쉽지않아서, 인터넷을 참조하여 정리한다.
시작은 rotate 함수를 만드는 법 부터 시작한다. 앞서 , 2차원의 빈 matrix를 만들었기 때문에 그 과정은 생략한다.
function rotate(matrix) { for (let y = 0; y < matrix.length; y++) { for (let x = 0; x < matrix.length; x++) { temp[y][x] = matrix[matrix.length - 1 - x][y]; // 시계방향 90도 회전 temp[y][x] = matrix[matrix.length - 1 - y][matrix.length - 1 - x]; // 180도 회전. temp[y][x] = matrix[x][matrix.length - 1 - y]; // 반시계방향 90도 회전 temp[y][x] = matrix[matrix.length - 1 - x]; // 위,아래 자리바꾸기 (180도 회전를 좌우반전) } } return temp; }
map을 이용하면 더 간단하게 쓸 수 있다.
function rotate1(arr){ return arr.map((row,y) => row.map((col,x)=>{ return arr[arr.length-1-x][y] // return arr[arr.length-1-y][arr.length-1-x] // return arr[x][arr.length-1-y] }) }