20230814 월요일
오늘은 상체운동을 했다.
체력이 너무 안 좋아져서 매일 운동을 할 예정.
건강한 몸과 맑은 정신을 위해!!
문제 설명
정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.
intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.
이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.
제한사항
1 ≤ arr의 길이 ≤ 100,000
1 ≤ arr의 원소 < 100
1 ≤ a1 ≤ b1 < arr의 길이
1 ≤ a2 ≤ b2 < arr의 길이

function solution1(arr, intervals) {
let answer = []; // 빈 배열 초기화
for (let i = 0; i <intervals.length; i++) { //intervals.length를 forloof
const [start, end] = intervals[i];// intervals[i]의 시작과 끝을 추출
const subarray = arr.slice(start, end +1);// 슬라이스를 사용하여 인덱스 시작부터 인덱스 끝까지의 요소를 가져오고, 끝값을 서브 배열에 포함하기 위해 끝값에 1을 더
for(const num of subarray) {// subarray의 각 요소를 forloof
answer.push(num); // answer에 현재요소 num을 배열에 추가
}
}
return answer;
}
function solution2(arr, intervals) {
let answer = [];
intervals.forEach(interval => {
const [start, end] = interval;
const subarray = arr.slice(start, end + 1);
answer.push(...subarray);
});
return answer;
}
solution1은 forloof로 돌리는 만큼 시간복잡도가 오래걸렸다.
그래서 메서드로 풀면 시간복잡도가 줄지 않을까? 해서 메서드로 푸는 방식을 검색해보았다.
solution1
solution1: 내부 루프 내부에서 하위 배열의 각 요소는 answer.push(num);을 사용하여 answer 배열에 하나씩 추가
solution2: 스프레드 구문 answer.push(...subarray);를 사용하여 하위 배열의 모든 요소를 answer 배열에 한 번에 추가
잘 읽었습니다. 좋은 정보 감사드립니다.