Javascript/코딩 테스트
[코딩 테스트, javascript] 배열의 균질적 분할 로직
tea-tea
2024. 9. 26. 11:10
로직의 목표
- 배열 A를 넘겨주고 maxLength x를 넘겨주면, 해당 배열을 최대 길이 x를 넘지 않는 배열들의 배열(2차원 배열)로 반환.
- 각 배열은 다른 배열과 길이가 2이상 차이나면 안됨.
정리하자면, 최대 길이에 맞게 배열을 분할하되, 균질하게 요소를 나눠야 한다.
function evenlySplitArray(arr, maxLength) {
const result = [];
const splitArrayLength = Math.ceil(arr.length / maxLength); // 필요한 배열의 갯수
const baseSize = Math.floor(arr.length / splitArrayLength); // 분할된 배열의 기본 크기(최소 크기)
const extraLength = arr.length % splitArrayLength; // 기본 크기에 따라 분할하고 남는 나머지 갯수
Array.from({ length: splitArrayLength }).forEach((_, idx) => {
// 나머지가 없을 때까지 분할할 배열에 요소 추가
const currentSize = baseSize + (idx < extraLength ? 1 : 0);
result.push(arr.slice(idx * currentSize, (idx + 1) * currentSize));
});
return result;
}
테스트 코드
console.log(
evenlySplitArray(
Array.from({ length: 72 }, (_, idx) => idx),
13
)
);
/**
결과
[
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35],
[36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47],
[48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71]
]
*/