| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- 프론트개발
- 프로그래머스
- 리트코드
- HTML
- [파이썬 실습] 기초 문제
- 부트캠프
- [파이썬 실습] 심화 문제
- [파이썬 실습] 중급 문제
- 개발일기
- 엘리스 AI 트랙 5기
- 자바스크립트
- 엘리스
- 삼항연산자
- 개발공부
- [AI 5기] 연습 문제집
- 자바스크립트 날씨 웹 만들기
- 자바스크립트 날씨
- 자바스크립트 reduce()
- 엘리스 ai 트랙
- 날씨 웹 만들기
- leetcode
- 코드스테이츠
- reactnativecli
- 코딩부트캠프
- RN 프로젝트
- 자바스크립트 sort()
- JavaScript
- 자바스크립트 split()
- 간단한 날씨 웹 만들기
- 프론트개발공부
- Today
- Total
개발조각
[프로그래머스] 행렬의 덧셈 본문

행렬의 덧셈 문제는
arr1=[[a,b],[c,d]]
arr2=[[A,B],[C,D]]
return = [[a+A, b+B],[c+C, d+D]]
arr1, arr2의 같은 위치에 있는 원소 값을 더하면 됩니다.
이 문제는 풀다 보면 좀 헷갈려서 "테스트 케이스 추가하기"에서 아래 내용을 추가하시면 좋을 것 같아요.
arr1 : [[1, 2, 3, 4], [4, 5, 6, 7], [1, 2, 3, 3]]
arr2 : [[3, 2, 1, 5], [6, 5, 4, 9], [4, 5, 6, 7]]
answer : [[4, 4, 4, 9], [10, 10, 10, 16], [5, 7, 9, 10]]
해결방안
function solution(arr1, arr2) {
var answer = [];
let sum = [];
for(let i=0; i<arr1.length; i++){
for(let j=0; j<arr1[0].length; j++){
let n = arr1[i][j] + arr2[i][j];
sum.push(n);
}
answer.push(sum);
sum = [];
}
return answer
}
var answer = []; : 행렬 덧셈한 후 나오는 값을 담을 배열
let sum = []; : 행렬 덧셈한 값을 담아주는 배열
어떻게 구하는지 설명하면
여기서 배열은 "행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행"이라 합니다.
이 말은 arr1, arr2의 배열이 안의 값만 다를 뿐 형태가 똑같은 배열이라는 소리입니다.
이러한 두 개의 배열이 있다고 하면
arr1=[[a,b],[c,d]]
arr2=[[A,B],[C,D]]
이렇게 행렬의 덧셈을 해주는 각각의 배열을 만들고 -> sum배열에 담을 거임
[a+A, b+B]
[c+C, d+D]
answer배열에다가 넣어주면 되겠죠?
[[a+A, b+B], [c+C, d+D]]
해결방안을 이해하기 위해
answer.push(sum);
sum = [];
이 두 개의 코드 줄을 뺀 상태에서의 코드를 설명하겠습니다.
for(let i=0; i<arr1.length; i++){
for(let j=0; j<arr1[0].length; j++){
let n = arr1[i][j] + arr2[i][j];
sum.push(n);
}
}
먼저 2차원 배열을 각각 제어하기 위해 중첩 for문을 사용해 주었습니다.
첫 번째 for문 : for(let i=0; i<arr1.length; i++) -> 행의 길이만큼 반복
두 번째 for문 : for(let j=0; j<arr1[0].length; j++) -> 열의 길이만큼 반복
만약
arr1 : [[1, 2, 3, 4], [4, 5, 6, 7], [1, 2, 3, 3]]
arr2 : [[3, 2, 1, 5], [6, 5, 4, 9], [4, 5, 6, 7]]
이러한 배열이 있다면
첫 번째 for문에서는 3번을 반복하게 되고
두 번째 for문에서는 4번을 반복하게 됩니다.
중첩 for문안에 행과 열의 크기가 같은 두 행렬의 같은 행의 합을 구해주고 sum배열에 넣어주었습니다.
let n = arr1[i][j] + arr2[i][j];
sum.push(n);
arr1 : [[1, 2, 3, 4], [4, 5, 6, 7], [1, 2, 3, 3]]
arr2 : [[3, 2, 1, 5], [6, 5, 4, 9], [4, 5, 6, 7]]
for(let i=0; i<arr1.length; i++) -> i는 3번 반복(0, 1, 2)
for(let j=0; j<arr1[0].length; j++) -> j는 배열안에 배열의 원소가 4개씩 있음으로 4번 반복(0, 1, 2, 3)
let n = arr1[i][j] + arr2[i][j];
i = 0이면 j는 0, 1, 2, 3 반복
j=0 -> arr1[0][0] + arr2[0][0] -> 1+3 = 4
sum.push(n); -> sum.push(4); -> sum = [4]
j=1 -> arr1[0][1] + arr2[0][1] -> 2+2 = 4
sum.push(n); -> sum.push(4); -> sum = [4, 4]
j=2 -> arr1[0][2] + arr2[0][2] -> 3+1 = 4
sum.push(n); -> sum.push(4); -> sum = [4, 4, 4]
j=3 -> arr1[0][3] + arr2[0][3] -> 4+5 = 9
sum.push(n); -> sum.push(9); -> sum = [4, 4, 4, 9]
i = 1이면 j는 0, 1, 2, 3 반복
j=0 -> arr1[1][0] + arr2[1][0] -> 4+6 = 10
sum.push(n); -> sum.push(10); -> sum = [4, 4, 4, 9, 10]
j=1 -> arr1[1][1] + arr2[1][1] -> 5+5 = 10
sum.push(n); -> sum.push(10); -> sum = [4, 4, 4, 9, 10, 10]
j=2 -> arr1[1][2] + arr2[1][2] -> 6+4 = 10
sum.push(n); -> sum.push(10); -> sum = [4, 4, 4, 9, 10, 10, 10]
j=3 -> arr1[1][3] + arr2[1][3] -> 7+9 = 16
sum.push(n); -> sum.push(16); -> sum = [4, 4, 4, 9, 10, 10, 10, 16]
i = 2이면 j는 0, 1, 2, 3 반복
j=0 -> arr1[2][0] + arr2[2][0] -> 1+4 = 5
sum.push(n); -> sum.push(5); -> sum = [4, 4, 4, 9, 10, 10, 10, 16, 5]
j=1 -> arr1[2][1] + arr2[2][1] -> 2+5 = 7
sum.push(n); -> sum.push(7); -> sum = [4, 4, 4, 9, 10, 10, 10, 16, 5, 7]
j=2 -> arr1[2][2] + arr2[2][2] -> 3+6 = 9
sum.push(n); -> sum.push(9); -> sum = [4, 4, 4, 9, 10, 10, 10, 16,5, 7, 9]
j=3 -> arr1[2][3] + arr2[2][3] -> 3+7 = 10
sum.push(n); -> sum.push(16); -> sum = [4, 4, 4, 9, 10, 10, 10, 16, 5, 7, 9, 10]
sum = [4, 4, 4, 9, 10, 10, 10, 16, 5, 7, 9, 10]
여기서 원하는 값은
sum = [4, 4, 4, 9, 10]
sum = [10, 10, 10, 16]
sum = [5, 7, 9, 10]
이렇게 받아서 배열인 상태로 합치는 걸 원하는 거잖아요?
그래서 그 과정을 for문안에서 제어해야 됩니다.
두 번째 for문을 다 돌린 다음에
answer.push(sum);
sum = [];
을 넣어주어야 됩니다.
여기서 sum = [];을 꼭 넣어주어야 됩니다.
arr1 : [[1, 2, 3, 4], [4, 5, 6, 7], [1, 2, 3, 3]]
arr2 : [[3, 2, 1, 5], [6, 5, 4, 9], [4, 5, 6, 7]]
중첩 for문 진행
i = 0, j는 0, 1, 2, 3 반복하면 sum = [4, 4, 4, 9]
answer.push(sum); -> answer = [ [4, 4, 4, 9] ]
sum = []; : 빈 배열로 바꾸기
i = 1, j는 0, 1, 2, 3 반복하면 sum = [10, 10, 10, 16]
answer.push(sum); -> answer = [ [4, 4, 4, 9], [10, 10, 10, 16] ]
sum = []; : 빈 배열로 바꾸기
i = 1, j는 0, 1, 2, 3 반복하면
sum = [5, 7, 9, 10]
answer.push(sum); -> answer = [ [4, 4, 4, 9], [10, 10, 10, 16] , [5, 7, 9, 10]]
answer = [ [4, 4, 4, 9], [10, 10, 10, 16] , [5, 7, 9, 10]]
여기까지 프로그래머스 행렬의 덧셈 해결방안에 대해 설명해보았습니다.
'알고리즘🅰 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] [1차] 다트 게임 (0) | 2022.03.13 |
|---|---|
| [프로그래머스] 직사각형 별찍기 (0) | 2022.03.10 |
| [프로그래머스] 핸드폰 번호 가리기 (0) | 2022.03.08 |
| [프로그래머스] 하샤드 수 (0) | 2022.03.08 |
| [프로그래머스] 평균 구하기 (0) | 2022.03.08 |