희락코딩

프로그래머스 1단계 - 행렬의 덧셈 본문

프로그래밍/코드 문제 풀이

프로그래머스 1단계 - 행렬의 덧셈

Hello JoyCoding 2021. 6. 23. 01:28
728x90
반응형

#문제

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

#제한 사항

행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

 

#입출력예시

arr1 arr2 return
[[1,2],[2,3]] [[3,4],[5,6]] [[4,6],[7,9]]
[[1],[2]] [[3],[4]] [[4],[6]]

 


# 문제 풀이 및 코드작성

이런문제를 손코딩으로 푸는 방법도 나쁘지 않다고 생각한다. 이중 반복을 써서 푼다고 가정하면 아래의 형태처럼 식을 적을 수 있다. (arr1=[[1,2],[2,3]], arr2 =[[3,4],[5,6]])

 

arr1[0][0] + arr2[0][0] = 1 + 3  = 4
arr1[0][1] + arr2[0][1] = 2 + 4  = 6

arr1[1][0] + arr2[1][0] = 2 + 5 = 7
arr1[1][1] + arr2[1][1] = 3 + 6 = 9

 

그래서 arr1의 길이만큼 전체적으로 반복문을 돌려주고 arr1[i][j] 값도 순회 하기위해 이중으로 돌려주면서 위의 규칙에 맞게 식을 적어주고 결과값을 담아준 변수를 답을 반환할 변수에 담아 주면 끝!!!

 

 

반복문으로 풀기

1
2
3
4
5
6
7
8
9
10
11
12
13
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;
}
 
cs

 

고차함수로 풀기

1
2
3
4
5
6
7
8
9
10
11
12
13
function solution(arr1, arr2) {
  const answer = arr1.map((el, idx1) => {
    return el.reduce((a, c, idx2) => {
      a.push(c + arr2[idx1][idx2]);
      return a;
    }, []);
  });
 
  return answer;
}
 
// arr1을 기준으로 배열을 한번 순회, map의 idx를 활용해 arr2 접근
// 리듀스로 2차원 배열을 한번 더 돌면서 더해줌 reduce((a,c,idx),[])
cs

 

 

728x90
반응형
Comments