배열 만들기 3

정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.

intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.

이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.

배열 만들기 3Lv.0

181895

https://school.programmers.co.kr/learn/courses/30/lessons/181895?language=javascript

해설

arr (배열)와 intervals (구간을 나타내는 배열들의 배열). 함수의 목적은 주어진 intervals에 따라 arr 배열에서 특정 부분을 추출하고, 그 결과를 하나의 배열로 합치는 것입니다.

  • Name
    리듀서 함수 사용
    Type
    Description
    • acc (누산기): 이전 reduce 호출의 결과값입니다. 첫 번째 reduce 호출에서는 초기값으로 빈 배열 []이 사용됩니다.

    • interval은 두 개의 숫자로 구성된 배열이며, 이 숫자들은 arr 배열에서 추출할 부분 배열의 시작 인덱스와 끝 인덱스를 나타냅니다.

  • Name
    arr.slice(interval[0], interval[1] + 1)
    Type
    Description

    arr에서 현재 interval에 해당하는 부분 배열을 추출합니다. slice 메소드는 시작 인덱스(interval[0])에서 시작하여 끝 인덱스(interval[1]) 직전까지의 요소를 새 배열로 반환합니다. 여기서 interval[1] + 1을 사용하는 이유는 slice 메소드가 끝 인덱스를 포함하지 않기 때문입니다.

  • Name
    concat
    Type
    Description

    추출된 부분 배열은 acc (누적 배열)에 concat 메소드를 사용하여 합쳐 반환합니다.

반복문을 활용하는 방법이 있지만, 리스트의 크기가 클 경우 불필요한 작업이 발생할 수 있기 때문에 배열 슬라이싱을 사용할 수 있습니다.

배열 만들기 3

function solution(arr, intervals) {
    return intervals.reduce((acc, interval) =>
        acc.concat(arr.slice(interval[0], interval[1] + 1)), []);
}