알고리즘

[BOJ] 2738 : 행렬 덧셈 (node.js)

옝옹 2023. 3. 26. 17:03

백준 2738번을 풀다가 아래 사진까지는 유도를 했는데 이중배열일 경우 

아래의 예제 출력처럼 출력하는 방법이 궁금했다.

sol 1.

많은 사람들이 이 방법을 이용해서 풀이를 했다

하지만 console을 찍었을 때

마지막 줄에도 + "\n"가 되어 줄바꿈이 출력되는 것이 신경 쓰였다.

 

sol 2.

두번째 방법으로 찾아본 방법은 forEach로 해보았다.

사실 forEach에 대한 문법은 잘 알지 못했는데 이번에 제대로 찾아보게 되었다.

 

forEach 메서드

배열에서 루프를 돌 때 사용

array.forEach(function(currentValue, index, arr));
  • function(currentValue, index, arr) - 배열의 각 항목에 대해 실행할 함수
  • currentValue - 배열의 값
  • index( 선택 사항 ) - 현재 항목의 인덱스
  • arr ( 선택 사항 ) - 현재 항목의 배열
let students = ['Yeeun', 'Jisu', 'Sumin'];

students.forEach(myFunction);

function myFunction(item, index, arr) {
	arr[index] = "Hello" + item;
}

console.log(students);

// ["Hello John", "Hello Sara", "Hello Jack"]

화살표 함수와 forEach

const students = ['Yeeun', 'Jisu', 'Sumin'];
const copyItems = [];

students.forEach(function(item) {
  console.log(element);
});

// Yeeun
// Jisu
// Sumin
forEach를 공부하다보니 map과 무엇이 다른지가 궁금했다.
  forEach() map()
기본 형식 배열명.forEach(function(매개변수) {
      실행문;
});
배열명.map(function(매개변수) {
    실행문;
})
설명 - 반복문 기능을 지닌 배열 메서드
- 배열의 요소를 순회하며, 모두 순회하면 실행을 멈춤
- 'break;' 사용이 불가
- for문보다 속도가 빠름
- map도 반복문 기능을 가지지만, 반환값이 있다는 점에서
forEach와 다름

- 배열의 요소를 순회하며, 모두 순회하면 실행을 멈춤
- 'break;' 사용이 불가
- 기존 배열의 값이 바뀌는게 아니라 새로운 배열을 만듦

→ 둘의 가장 큰 차이는 Return 값이다. forEach는 기존 Array를 변경하고 Map은 새로운 배열을 반환한다.

 

sol 3.

그래서 map으로도 코드를 짜봤더니 이렇게도 console이 잘 찍혔다.

 

최종 코드

let input = require('fs').readFileSync('/dev/stdin').toString().split("\n");
let [N, M] = input[0].split(" ").map(Number);

let A = [];
let B = [];
let array = [];
for(let i = 0 ; i < N ; i++) {
    array.push([]);
}

for (let i = 0 ; i < N ; i++) {
    A.push(input[i+1].split(" ").map(Number));
    B.push(input[i+1+N].split(" ").map(Number));
}

for(let n = 0 ; n < N ; n++) {
    for(let m = 0 ; m < M ; m++) {
        array[n].push(A[n][m] + B[n][m]);
    }
}

const sol = array.map((e) => e.join(" "));
console.log(sol.join("\n"));