어레이 청킹 문제 해결

3801 단어
저는 최근에 데이터 구조와 알고리즘에 대해 더 많이 배우는 것을 즐기고 있습니다. 그러나 초기에는 익숙해져야 하는 다양한 유형의 문제와 패턴에 압도당했습니다. 이 배열 청킹 문제는 프로세스를 이해하고 이전 문제의 기술을 적용하기 시작했다고 느꼈던 첫 번째 문제 중 하나입니다. 나는 Udemy의 Stephen Grider's Coding Interview Bootcamp에서 그것을 만났습니다.

문제
배열과 크기가 주어지고 배열을 주어진 크기와 같은 길이의 더 작은 하위 배열로 나누라는 요청을 받습니다.

전.

chunk([1, 2, 3, 4, 5, 6], 2)
//Output will be [[1, 2], [3, 4], [5, 6]]

chunk([1, 2, 3, 4, 5], 3)
//Output will be [[1, 2, 3], [4, 5]]

// chunk([1, 2, 3, 4, 5], 2)
//Output will be [[ 1, 2], [3, 4], [5]]

내가 지적한 한 가지 세부 사항은 그들이 우리에게 크기를 줄 때 우리가 만들고자 하는 배열의 수가 아니라 원하는 하위 배열의 길이라는 것입니다. 내가 문제를 읽을 때 가치를 발견하는 것은 이와 같은 세부 사항입니다. 또한 설명을 위한 샘플 사례를 갖는 것도 도움이 됩니다.

해결책

첫 번째 단계는 문제가 정확히 무엇을 요구하는지 식별하는 것입니다. 이 경우에는 더 작은 어레이로 구성된 어레이입니다. 즉, 우리가 취할 수 있는 한 가지 접근 방식은 결국 모든 하위 배열을 보유할 빈 배열을 만드는 것입니다.

function chunk(array, size) {
  const chunkedArray = [];

}

이제 설정이 완료되었으므로 원래 배열에서 작업을 수행하기 위해 루프를 작성합니다. 먼저 변수 이름을 index 로 지정할 카운터를 설정합니다.

function chunk(array, size) {
  const chunkedArray = [];

  let index = 0;
}

다음으로 인덱스가 주어진 배열의 길이보다 작은 동안 어떤 유형의 작업을 수행한다는 while 루프를 설정합니다.

function chunk(array, size) {
  const chunkedArray = [];

  let index = 0;

  while (index < array.length) {
  //Only the first line of the while loop 

}

그 다음은 첫 번째 어레이를 하위 어레이로 청크하기 시작하는 실제 작업입니다. .slice() 방법을 사용하여 원래 배열에서 주어진 크기와 동일한 길이의 섹션을 잘라낼 수 있습니다.

array.slice(index, index + size)
.slice() 메서드는 전달한 첫 번째 인수(start Index)에서 시작하고 전달한 두 번째(선택 사항) 인수에서 슬라이싱을 중지하고 end(end Index)를 포함하지 않습니다. 슬라이스에 두 번째 인수를 전달하지 않으면 첫 번째 인수에서 시작하여 배열의 끝으로 슬라이스됩니다.
.slice(startIndex, endIndex)
현재 코드에 있는 내용을 살펴보겠습니다.

function chunk(array, size) {
  const chunkedArray = [];

  let index = 0;

  while (index < array.length) {
    array.slice(index, index + size);
    index += size;
  }

}

여기서 우리는 인덱스에서 인덱스 + 크기까지 배열을 슬라이싱하고 배열의 다음 "덩어리"로 이동하기 위해 크기 값만큼 인덱스를 증가시킵니다.

이것은 지금까지는 좋지만 지금까지 그 새로운 "덩어리"는 아직 살 곳이 없습니다. 여기에서 첫 번째 단계에서 선언한 빈 배열로 돌아갑니다. 현재 비어 있는 이 배열에는 생성되는 새 청크가 포함될 것입니다. .push() 메서드를 사용하여 해당 배열 청크를 빈 배열로 이동할 수 있습니다.

function chunk(array, size) {
  const chunkedArray = [];

  let index = 0;

  while (index < array.length) {
    chunkedArray.push(array.slice(index, index + size));
    index += size;
  }

}

이제 while 루프가 원래 배열을 반복하면서 slice 메서드로 생성된 청크를 chunkedArray로 푸시합니다.

마지막으로 함수가 문제가 요청한 것(이 경우 더 작은 하위 배열을 포함하는 배열)을 반환하는지 확인해야 합니다.

따라서 모든 반복에 대해 chunkedArray를 반환하지 않고 최종 배열만 반환하기 때문에 while 루프 외부에서 단순히 chunkedArray를 반환합니다.

function chunk(array, size) {
  const chunkedArray = [];

  let index = 0;

  while (index < array.length) {
    chunkedArray.push(array.slice(index, index + size));
    index += size;
  }
  return chunkedArray;
}

그러면 답변으로 하위 배열로 구성된 배열이 제공됩니다. 이 문제는 while 루프에 대한 더 많은 연습을 제공하고 유용한 슬라이스 방법을 구현했기 때문에 내 연구에 도움이 되었습니다.

자원

Stephen Grider's Algorithms and Data Structures Udemy Course

Interview Cake

좋은 웹페이지 즐겨찾기