코딩테스트 연습 > 연습문제
정확성: 100.0
합계: 100.0 / 100.0
2025년 01월 06일 09:55:44
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
arr1 | arr2 | return |
---|---|---|
[[1,2],[2,3]] | [[3,4],[5,6]] | [[4,6],[7,9]] |
[[1],[2]] | [[3],[4]] | [[4],[6]] |
function solution(arr1, arr2) {
var answer = [[]];
for(let i=0;i<arr1.length;i++){
answer[i] = [];
for (let j=0;j<arr1[i].length;j++){
let a = arr1[i][j];
let b = arr2[i][j];
let temp = a+b;
answer[i][j] = temp;
}
}
return answer;
}
- 첫번째 배열의 길이만큼 반복-> 최대 500번 돌 수 있다.
- 2번째 depth의 반복문에서 1번째 반복문에서 가져온 i번째 원소의 길이만큼 반복
- arr1과 arr2의 idx=0번째 원소부터 시작해 순서대로 arr1[0][0]~...
모든 요소를 가져와 temporary variable로 사용할 a, b에 담아 temp에 합한다.
- 다음 인덱스로 넘어가기 전에 answer의 정해진 인덱스- 기존에 사용했던 i,j를 기준으로 합계 저장
- 반복문 끝나면 answer 리턴
메모리: 67.2 MB, 시간: 8.70 ms
function solution(arr1, arr2) {
const answer = new Array(arr1.length); // 미리 배열 크기를 할당합니다.
for (let i = 0; i < arr1.length; i++) {
answer[i] = new Array(arr1[i].length); // 내부 배열도 미리 할당
for (let j = 0; j < arr1[i].length; j++) {
answer[i][j] = arr1[i][j] + arr2[i][j]; // 불필요한 변수 할당 제거
}
}
return answer;
}
const answer
: 새로운 배열 할당 및, 길이를 지정해줄 수 있다.answer[i] = new Array(길이)
: 큰 배열(?)외에 안에 담을 배열도, 길이 지정 - 비교해 보자면, 내 코드는 불필요한 변수할당, a, b...가 눈에 띄네 ㅠㅠ 누네띠네 먹고싶다.
여기서 궁금증.
map을 이용하는 방법은 없을까?
function solution(arr1, arr2) {
return arr1.map((row, i) =>
row.map((value, j) => value + arr2[i][j])
);
}
아니나 다를까, 아는 만큼, input 넣은 만큼 나온다고
map으로 하니까 훨씬 나아지잖아...
코드 길이 너무 짧고 혁명적이야.... 사랑해
map
. 파라미터로는 row, i 오시겠다.row.map()
: 각 행에 대해서도 똑같이 순회를 해 주겠다.value
랑 arr2의 동일한 인덱스 값을 불러와 합한다.map
. 배열을 리턴해주니 여기서 끝 ㅠㅠ메모리: 67.2 MB, 시간: 8.70 ms
메모리: 67.3 MB, 시간: 8.13 ms