주로 BFS
나 DFS
문제를 풀면서 현재 위치를 다시 방문하지 않기 위한 2차원 배열을 만든다.
주어진 2차원 배열 데이터와 행, 열이 같고 true, false
값을 원소로 갖는 2차원 배열을 만들 때 아래와 같이 중첩 반복문을 사용해서 만들 수 있다.
초기 값이 모두 false
인 2차원 배열을 만들어 보자.
function getVisited(row, col) {
const visited = []
for(let i=0; i<row; i++) {
const temp = [];
for(let j=0; j<col; j++) {
temp.push(false);
}
visited.push(temp);
};
return visited;
}
Array.from() 메서드는 유사 배열 객체(array-like object)나 반복 가능한 객체(iterable object)를 얕게 복사해 새로운 array를 만든다. 또는 ES6의 Array.map을 사용할 수 있다.
//Array.from 의 사용
const getVisited = (row, col) =>
Array.from(Array(row), () => Array(col).fill(false));
//Array.map 의 사용
const getVisited = (row, col) =>
Array(row)
.fill(null)
.map(() => Array(col).fill(false));
Array.from() 으로 새 Array를 만드려면 arrayLike
매개변수 자리에 유사 배열 객체나 반복 가능한 객체를 넣어 주어야 한다. 여기서 유사 배열 객체는 length
속성과 인덱싱된 요소를 가진 객체라고 하는데, 아래의 예제를 보면 length
값이 들어있는 객체를 arrayLike
자리에 넣어주고 있다.
// 수열 생성기
// 배열을 처음 만들었을 때 초기값은 모두 undefined로 되어 있음,
// 따라서 v는 undefined.
Array.from({length: 5}, (v, i) => i);
// [0, 1, 2, 3, 4]
이를 이용하면 수열 생성기를 만들 수 있다.
// 수열 생성 함수.
const range = (start, stop, step) =>
Array.from({ length: (stop - start) / step + 1 }, (_, i) => start + i * step);
// 0에서 4까지 1씩 증가하는 수열.
range(0, 4, 1);
// [0, 1, 2, 3, 4]
// 1에서 10까지 2씩 증가하는 수열.
range(1, 10, 2);
// [1, 3, 5, 7, 9]
// 알파벳 수열 만들기.
// .charCodeAt() : 특정 위치에 있는 문자의 유니코드 값을 반환합니다.
// String.fromCharCode(n1, n2 ...): 유니코드 숫자를 문자로 바꿔줍니다.
range('A'.charCodeAt(0), 'Z'.charCodeAt(0), 1).map(x => String.fromCharCode(x));
// ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]