배송 묶음별 무게 합계

자바스크립트 코딩테스트 문제로 chunk-aggregation 주제를 연습해보세요. 난이도는 easy이며, 브라우저에서 바로 JavaScript로 풀이를 실행할 수 있습니다.

today easy chunk-aggregation 함수명: sumDeliveryBatches 제한 시간: 200ms

문제 설명

배송 상자들의 무게가 담긴 배열 weights와 한 묶음에 넣을 상자 수 batchSize가 주어집니다.

배열의 앞에서부터 batchSize개씩 끊어 각 묶음의 무게 합계를 구하는 sumDeliveryBatches 함수를 작성하세요.

마지막에 남은 상자 수가 batchSize보다 적어도, 그 상자들은 버리지 않고 마지막 묶음으로 합산합니다.

제한사항

  • weights는 정수 배열입니다.
  • 0 <= weights.length <= 100000
  • 0 <= weights[i] <= 10000
  • 1 <= batchSize <= 100000
  • 반환값은 각 묶음의 무게 합계를 순서대로 담은 배열입니다.
  • weights가 빈 배열이면 빈 배열을 반환합니다.

예시

  • 입력: weights = [3, 5, 2, 4, 6], batchSize = 2 -> 출력: [8, 6, 6]
  • 입력: weights = [10, 20, 30], batchSize = 3 -> 출력: [60]
  • 입력: weights = [], batchSize = 4 -> 출력: []
  • 입력: weights = [7, 1, 2], batchSize = 5 -> 출력: [10]

힌트

  • 현재 묶음의 합과 그 묶음에 들어간 상자 개수를 따로 관리해 보세요.
  • 상자 개수가 batchSize에 도달하면 합계를 결과 배열에 넣고 다시 0부터 시작하면 됩니다.
  • 반복이 끝난 뒤 아직 남아 있는 묶음이 있는지도 확인해야 합니다.

해설

이 문제는 배열을 한 번 순회하면서 일정한 크기마다 합계를 끊어 저장하는 구현 문제입니다.

예를 들어 weights = [3, 5, 2, 4, 6], batchSize = 2라면 묶음은 다음처럼 나뉩니다.

  1. [3, 5]의 합은 8입니다.
  2. [2, 4]의 합은 6입니다.
  3. 마지막 [6]은 2개가 되지 않지만 남은 묶음이므로 합 6을 저장합니다.

따라서 결과는 [8, 6, 6]입니다.

풀이 순서는 다음과 같습니다.

  1. 결과 배열 result, 현재 묶음 합 sum, 현재 묶음 개수 count를 준비합니다.
  2. weights를 앞에서부터 순회하며 sum에 무게를 더하고 count를 1 늘립니다.
  3. countbatchSize와 같아지면 sumresult에 넣고 sumcount를 0으로 되돌립니다.
  4. 순회가 끝난 뒤 count가 0보다 크면 마지막 묶음의 sumresult에 넣습니다.
  5. result를 반환합니다.

각 상자를 한 번씩만 확인하므로 시간 복잡도는 O(n)입니다.

코드 작성

starter code를 바탕으로 함수를 완성한 뒤 예제 테스트를 실행해보세요.

JavaScript 에디터 로딩 중...

커스텀 테스트

함수 인자를 JSON 배열 형태로 입력하세요. 예: [3, 5], [[1, 2, 3]]

아직 실행하지 않았습니다.

실행 결과

아직 실행하지 않았습니다.

예제 테스트를 실행하면 여기에서 결과를 확인할 수 있습니다.

댓글

문제 풀이 아이디어, 질문, 반례를 자유롭게 나눠보세요.