프로그래머스 lv1- 행렬의 덧셈

soo's·2023년 4월 8일
0

알고리즘 풀기

목록 보기
5/15
post-thumbnail

문제는 링크 참고 -> 행렬의 덧셈

첫 번째 풀이

function solution(arr1, arr2) {
  var answer = [];
  for (let i = 0; i < arr1.length; i++) {
    let temp = [];
    for (let j = 0; j < arr1[i].length; j++) {
      temp.push(arr1[i][j] + arr2[i][j]);
    }
    answer.push(temp);
  }
  return answer;
}

j포문을 돌기전에 i포문에서 temp라는 배열을 만들어서 합한 값을 temp.push 했다.
조금 원시적인 방법 & 빅오를 배우고 나니까 포문 중첩을 고치고 싶어졌다.
다른 사람의 풀이를 참고하여 두 번째 풀이를 진행했다.

두 번째 풀이


function solution(arr1, arr2) {
  let answer = arr1.map((val, idx) => {
    return arr1[idx].map((val2, idx2) => val2 + arr2[idx][idx2]);
  });
  return answer;
}

map이라는 메서드는 콜백함수를 실행하여 새로운 배열을 반환한다.
먼저 화살표 함수로 return 없이 () => 뫄뫄 이렇게 적어도 되고, () => {return 뫄뫄} 이런식으로 중괄호를 사용하면 return을 적어주면 된다.

핵심은 arr1을 map을 돌면서 가장 바깥 배열을 돌고 그 다음 map을 또 써서 2중 배열까지 돌게 한다.
그런데 첫 번재 map 사용시 val라는 말이 정확히는 arr1 (= [[2,3],[1,4]])의 각각의 요소인 [2,3] 과 [1,4]를 말하는 것이니, 헷갈리지 않게 arr라고 바꿔도 될 것 같다.


function solution(arr1, arr2) {
  let answer = arr1.map((arr, idx) => {
    return arr.map((val, idx2) => val + arr2[idx][idx2]);
  });
  return answer;
}

기존 코드의 arr1[idx]가 결국은 arr1을 맵으로 돌려서 받는 arr 요소이기때문에 arr1[idx] => arr로 수정해줬다.

0개의 댓글