[Jacoste] 알고리즘 공부

tamagoyakii·2023년 1월 2일
0

Jacoste

목록 보기
4/9
post-thumbnail

값을 알아서 채워주는 배열을 만드는 방법에는 다음과 같은 것들이 있다.

Array().fill()

fill(a) 함수는 배열을 a라는 값으로 동일하게 채워준다. 다음과 같은 경우에 사용할 수 있다.

// 다리를 지나는 트럭

function solution(len, wei, trucks) {
    const bridge = Array(len).fill(0);
    let time = 0;
    for (let on = 0; trucks.length; time++) {
        on -= bridge.shift();
        if (on + trucks[0] <= wei) {
            on += trucks[0];
            bridge.push(trucks.shift());
        }
        else bridge.push(0);
    }
    return time + bridge.length;
}

위의 코드는 큐(queue)를 사용하여 트럭이 다리를 지나는 시간을 구하는 문제다. 다리를 0으로 채워진 큐로 만들기 위해 Array().fill()을 사용했다. 이후 반복문들 돌며 push()shift()로 큐의 원소를 추가/삭제한다.

위의 식에 map()을 사용하면 값을 바꿔줄 수 있다.

const arr = Array(5).fill().map((_, i) => i);

console.log(arr);	// [0, 1, 2, 3, 4];

사이즈 5의 배열에 fill()을 하면 값이 undefined로 초기화된다. 이후 map()을 통해 인덱스를 값으로 채워주면 1씩 증가하는 배열을 얻을 수 있다. 이와 같은 역할을 하는 함수가 아래에 있다.

Array.from()

Array.from() 메서드에 대한 공식적인 설명은 다음과 같다.

Array.from() 메서드는 유사 배열 객체(array-like object)나 반복 가능한 객체(iterable object)를 얕게 복사해 새로운 Array 객체를 만듭니다.

메서드에서 사용되는 인자는 다음과 같다.

Array.from(arrayLike[, mapFn[, thisArg]])
  1. arrayLike: 배열로 변환하고자 하는 유사 배열 객체나 반복 가능한 객체.
  2. mapFn(Optional): 배열의 모든 요소에 대해 호출할 맵핑 함수.
  3. thisArg(Optional): mapFn 실행 시에 this로 사용할 값.
const arr = Array.from([1, 2, 3], x => x + x);

console.log(arr);	// [2, 4, 6]

맵핑 함수의 첫 번째 인자는 배열 요소의 값이다. 위의 식은 유사 배열 객체의 값을 한 번 더한 값을 반환한다.

Array.from() 메서드를 사용해 위에서 Array().fill().map() 메서드로 만든 배열도 만들 수 있다.

const arr = Array.from({length: 5}, (_, i) => i);

console.log(arr);	// [0, 1, 2, 3, 4];

유사 배열 객체의 length 속성으로 배열의 길이를 구한 다음, 인덱스를 사용해 1씩 증가하는 배열을 만드는 것이다. 뒤의 맵핑 함수를 바꿔서 다른 방식으로 증가하는 배열을 만들 수도 있다.

0개의 댓글