Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[프로그래머스 - Lv. 2] 행렬의 곱셈 #23

Conversation

jungmyunggi
Copy link
Collaborator

문제

Type Info
Platform 프로그래머스
Level 2
Link https://school.programmers.co.kr/learn/courses/30/lessons/12949

풀이

function solution(arr1, arr2) {
    var answer = [[]];
    const r1 = arr1.length;
    const c1 = arr1[0].length;
    const r2 = arr2.length;
    const c2 = arr2[0].length;
    const temp = [];
    for (let i = 0; i < r1; i++) {
        temp.push(new Array(c2).fill(0));
    }

    for (let i = 0; i < r1; i++) {
        for (let j = 0; j < c2; j++) {
            for (let k = 0; k < c1; k++) {
                temp[i][j] += arr1[i][k] * arr2[k][j];
            }
        }
    }
    answer = [...temp];
    return answer;
}
  1. 각 arr의 row와 col을 변수에 저장
  2. r1*c2인 배열 선언
  3. 반복문
    • i : arr1의 행
    • j : arr2의 열
    • k : 행렬 곱셈을 위한 인덱스
  4. 각 위치에서 arr1[i][k] * arr2[k][j] 값을 누적하여 temp[i][j]에 저장

어려웠던 점

  • 3중 반복문을 사용하면 안된다는 고정관념에 2중으로 처리하려다 시간을 버림

알게된 점

  • 구지 2차원 배열 선언시에 const temp = [...new Array(r1)].map((_,i)=> new Array(c2).fill(0)) 처럼 할 필요가 없었다
  • for문으로 push하는게 가독성도 좋고 실수 할 일도 적은것 같다

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant