본문 바로가기
  • soldonii's devlog
Javascript 공부/알고리즘 풀이

자바스크립트 알고리즘(2) - chunk

by soldonii 2019. 8. 26.

*Udemy의 "The Coding Interview Bootcamp: Algorithms + Data Structures" 강의에서 학습한 내용을 정리한 포스팅입니다.

*https://soldonii.github.io에서 작성한 글을 티스토리로 옮겨온 포스팅입니다.

*자바스크립트를 배우는 단계라 오류가 있을 수 있습니다. 틀린 내용은 댓글로 말씀해주시면 수정하겠습니다. 감사합니다. :)


지문

// Given an array and chunk size, divide the array into many subarrays
// where each subarray is of length size
// --- Examples
// chunk([1, 2, 3, 4], 2) --> [[ 1, 2], [3, 4]]
// chunk([1, 2, 3, 4, 5], 2) --> [[ 1, 2], [3, 4], [5]]
// chunk([1, 2, 3, 4, 5, 6, 7, 8], 3) --> [[ 1, 2, 3], [4, 5, 6], [7, 8]]
// chunk([1, 2, 3, 4, 5], 4) --> [[ 1, 2, 3, 4], [5]]
// chunk([1, 2, 3, 4, 5], 10) --> [[ 1, 2, 3, 4, 5]]

 

1번 풀이

1. 최종 결과물이 될 result 빈배열을 만든다.

2. 원본 배열을 for loop으로 반복하면서, result의 마지막 element를 last변수에 담는다.

3. last 가 존재하지 않거나 길이가 size 보다 작으면, 새로운 chunk가 필요하다는 의미이므로 현재 element를 배열에 담아서 result 에 push해준다.

4. 그렇지 않을 경우는, chunk가 존재한다는 의미이므로 last chunk에 현재 element만 push해준다.

 

function chunk(array, size) {
  let result = [];
  for (let i of array) {
    let last = result[result.length - 1];
    if (!last || last.length === size) {
      result.push([i]);
    } else {
      last.push(i);
    }
  }
}

 

2번 풀이 : .slice()

for loop을 통해 원본 배열의 앞에서부터 size만큼 slice한 후 result 에 push한 후 return한다.

function chunk(array, size) {
	let result = [];
  for (let i = 0; i < array.length; i += size) {
    result.push(array.slice(i, i + size));
  }
  return result;
}

 

댓글