문제 설명
정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요. num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다. num_list n result [1, 2, 3, 4, 5, 6, 7, 8] 2 [[1, 2], [3, 4], [5, 6], [7, 8]]
제한사항
- num_list의 길이는 n의 배 수개입니다.
- 0 ≤ num_list의 길이 ≤ 150
- 2 ≤ n < num_list의 길이
풀이
const solution = (num_list, n) => {
return num_list.reduce((acc, cur) => {
if(acc.temp.length < n){
acc.temp.push(cur);
if(acc.temp.length === n){
acc.origin.push(acc.temp);
acc.temp = [];
}
}
return acc;
},{temp:[], origin: []}).origin;
}
간단하게 reduce 매서드를 이용해서 {temp: [], origin: []}에다가 순회하면서
temp 배열의 길이가 n보다 작을 경우 현재원소를 temp에 넣고,
넣은 뒤 temp 배열의 길이가 n일 경우 temp 자체를 origin 배열에 넣어준 뒤,
temp 배열을 초기화 해줬다.
즉,
[1,2,3,4,5,6] , 2 가 값으로 주어진다면
{temp: [1], origin: []}
{temp: [1,2], origin: []}
{temp: [], origin: [[1,2]]}
{temp: [3], origin: [[1,2]]}
{temp: [3,4], origin: [[1,2]]}
{temp: [], origin: [[1,2],[3,4]]}
{temp: [5], origin: [[1,2],[3,4]]}
{temp: [5,6], origin: [[1,2],[3,4]]}
{temp: [], origin: [[1,2],[3,4],[5,6]]}
이런식으로 reduce가 작동하여
최종적으로 주어진 {temp: [], origin: [[1,2],[3,4],[5,6]]} 에서 origin 을 반환해주었다.
다른사람의 풀이에서는.. while문과 slice로 원본 배열을 수정해가면서 하는 방식도 있었다.