코딩기록

string) sum matrix / 2차원배열을 이중포문으로 변경후 모든 요소 총합 - map, reduce, forEach, for 본문

프론트/JS)코딩테스트

string) sum matrix / 2차원배열을 이중포문으로 변경후 모든 요소 총합 - map, reduce, forEach, for

뽀짝코딩 2024. 9. 23. 23:21
728x90

문제 설명

2차원 정수 배열 matrix가 주어지면 모든 요소의 합을 반환하는 함수를 구현한다.

 

const sumMatrix = matrix => {
	// do something
};

console.log(sumMatrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])); // 45
console.log(sumMatrix([])); // 0

 


풀이

1번 풀이 map + reduce

map은 해당 행의 모든 숫자를 합산 한다.  [6, 15, 24] 

그 다음 reduce로 [6, 15, 24] 의 값을 하나씩 축적하면서 더하고 

그 값을 리턴한다.

const sumMatrix1 = matrix => {
  const arr = matrix.map(row => row.reduce((sum, num) => sum + num, 0)).reduce((acc, rowSum) => acc + rowSum, 0);
  console.log("arr: ", arr);
  return arr;
};
console.log(sumMatrix1([[1, 2, 3], [4, 5, 6], [7, 8, 9]])); // 45
console.log(sumMatrix1([])); // 0

 

2번 풀이 reduce

flat()메서드로 2차원 배열을 1차원 배열로 평탄화하고

reduce를 이용해 행의 합계를 모두 더한 결과를 반환한다.

// 2번 풀이 reduce
const sumMatrix2 = matrix => {
  return matrix.flat().reduce((num, cur) => num + cur, 0);
};
console.log(sumMatrix2([[1, 2, 3], [4, 5, 6], [7, 8, 9]]));  // 45
console.log(sumMatrix2([]));  // 0

 

3번 풀이 forEach

flat()으로 2차원 배열을 1차원 배열로 평탄화하고

고차함수 forEach를 += 복합대입연산자를  사용해 합산한 값을 반환한다. 

// 3번 풀이 forEach문
const sumMatrix3 = str => {
  let sum = 0;
  str.flat().forEach(num => {
    sum += num
  });

  return sum;
};
console.log(sumMatrix3([[1, 2, 3], [4, 5, 6], [7, 8, 9]]));  // 45
console.log(sumMatrix3([]));  // 0

 

4번 풀이 for문

for문도 먼저 flat메서드로 평탄화를 진행한 다음 시작한다.

[1, 2, 3, 4, 5, 6, 7, 8, 9] 1차원 배열 flatMatrix 길이만큼 반복적으로 요소들을  순회하면서

sum에 합산 후 반환한다.

// 4번 풀이 for문
const sumMatrix4 = matrix => {
  const flatMatrix = matrix.flat();
  let sum = 0;
  for (let i = 0; i < flatMatrix.length; i++) {
    sum += flatMatrix[i];
  }
  return sum;
};
console.log(sumMatrix4([[1, 2, 3], [4, 5, 6], [7, 8, 9]])); // 45
console.log(sumMatrix4([])); // 0

 

 

5번 풀이 2중포문

첫 번째 for문은 2차원 배열의 **행(row)**을 순회. [1, 2, 3], [4, 5, 6], [7, 8, 9]

두 번째 for문 은 1차원 배열의 각 행의 요소(열)를 순회 1, 2, 3 / 4, 5, 6 / 7, 8, 9

 

sum = sum + matrix[i][j];:

  • matrix[i][j]는 i번째 행의 j번째 열에 위치한 요소를 나타낸다.
  • 각 요소를 sum에 더하여 누적한다.
// 5번 풀이 2중포문
const sumMatrix = matrix => {
  let sum = 0;
  for (let i = 0; i < matrix.length; i++) {
    for (let j = 0; j < matrix[i].length; j++){
      sum = sum + matrix[i][j];
    }
  }
  return sum;
};
console.log(sumMatrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])); // 45
console.log(sumMatrix([])); // 0

-------------
console.log("matrix.length: ", matrix.length);  // 3
console.log("matrix[i][j]: ", matrix[i][j]);  //1, 2, 3, 4, 5, 6, 7, 8, 9
console.log("matrix[i]: ", matrix[i]);  // [1, 2, 3]*3, [4, 5, 6]*3, [7, 8, 9]*3
console.log("matrix[j]>>>>>>: ", matrix[j]);  // [1, 2, 3], [4, 5, 6], [7, 8, 9] *3
console.log("matrix[j].length: ", matrix[j].length);  // [1, 2, 3]... 배열안 값이 모두 3개라서 3만 나옴.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
Comments