[JS] 배열메소드, 배열 다루는 법 정리(내가 알고리즘 문제 해결에서 자주 사용하는 것들)

apro_xo·2022년 4월 26일
0
post-thumbnail

1. 초기화 관련

1-1. Array.from({length: }, (value, index)=>())

from() 메서드를 사용하여 유사배열객체를 만듦과 동시에 초기화하는 방법이다.
✨ 예를 들어 1 ~ 8 까지의 숫자가 원소로 들어있는 배열을 만들고 싶다고 가정하자.

let tempArray = Array.from({length : 8}, (value, index) => index + 1)
 // [1,2,3,4,5,6,7,8]

원하는 길이를 넘겨주고, 인덱스에 따라 인덱스의 + 1 만큼을 원소로 넣는다.

✨ 만약 모든 원소를 0으로 초기화하고 싶을 때는 아래와 같이 실행하면 된다.

let tempArray = Array.from({length:8}, 0);
//[0,0,0,0,0,0,0,0]

1-2. new Array(length).fill(item)

배열의 선언과 초기화를 동시에 할 수 있는 또 다른 방법이다. 특정 길이 만큼의 배열을 선언하고 특정 원소로 초기화 할 수 있는 방법이다.

예를 들면 길이가 9인 배열을 모두 3으로 초기화하려고 한다고 가정하자.

let tempArray = new Array(9).fill(3);
console.log(tempArray);
// [3,3,3,3,3,3,3,3,3]

2. 포함관계

2-1. includes()

어떤 배열에 특정 원소가 포함되어 있는지 알고 싶을 때 includes() 메서드를 사용하면 된다. boolean 타입을 반환하며 사용법은 아래와 같다.

let tempArray = [1,2,3,6,7,8];
if(tempArray.includes(3)) {
  console.log('includes!!');
}

2-2. indexOf()

어떤 배열에서 특정 원소의 인덱스를 반환해주는 메서드이다.
어떤 배열에서 특정 원소가 존재하지 않는다면 -1을 반환해주고 존재한다면 인덱스를 반환해주는 것이 특징이다.

이 특징을 이용하여 포함관계를 알아낼 수 있다.

let tempArray = [1,2,3,4,5,6,7];

// 1이 존재한다면
if(tempArray.indexOf(1) !== -1) {
	console.log('includes!!');
}

3. stack, queue

자바스크립트에서 스택, 큐를 배열로 나타낼 수 있다.

스택은 입구와 출구가 같기 때문에, 먼저 들어간 원소가 나중에 나가는 방식이다.
반면, 큐는 입구와 출구가 분리되어 있어 먼저 들어간 원소가 먼저 나간다.

스택의 개념에 맞게 사용되는 배열 메서드로는 push(), pop() 이 있고,
큐의 개념에서는 push(), shift()가 있다.

let stack = Array.from({length:8}, (v, i)=>i+1);
stack.push(9); // [1,2,3,4,5,6,7,8,9]
stack.pop(); // [1,2,3,4,5,6,7,8]

let queue = Array.from({length:6}, (v, i)=> i+1);
queue.push(0); // [1,2,3,4,5,6,0]
queue.shift(); // [2,3,4,5,6,0]

✨성능 이슈

큐의 개념에서 shift() 메서드는 위와 같이 맨 앞의 원소를 제거하는 기능을 수행한다.

하지만 이 shift() 메서드의 작동 방식에 대해 얘기해보면, 맨 앞의 원소를 제거한 후, 뒤에 있는 원소들을 한 칸씩 당기며 기능을 수행한다.

따라서 시간복잡도는 O(n)이 걸린다. 이는 배열 또는 큐의 크기가 커질수록 성능이 저하될 수 있다는 얘기다.

결론은, 큐의 개념을 스택으로 해결할 수 있다면 스택으로 해결하는 것이 성능상으로는 더 좋을 수가 있다.

reverse()를 사용하자.

배열을 뒤집어 원소를 역순으로 정렬한다.

let tempArray = [1,2,3,4,5];
tempArray.reverse(); // [5,4,3,2,1]

tempArray.pop(); // [5,4,3,2]

위의 코드처럼 역순으로 정렬한 후 pop()을 하면 큐에서 shift()한 것과 같은 결과를 나타낸다. 그리고 shift()로 인한 성능 저하를 막을 수 있다.

profile
유능한 프론트엔드 개발자가 되고픈 사람😀

0개의 댓글