[Python - Lv.2] 행렬의 곱셈

2024. 3. 23. 20:52·알고리즘 연습/프로그래머스

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제

문제 이해

  • 2차원 행렬 arr1과 arr2를 입력받아 행렬곱을 수행하여 반환
  • 곱할 수 있는 배열만 주어짐

풀이

arr1의 한 행과 arr2의 한 행을 행렬곱 연산하여 tmp에 append 및 하나의 행이 완성되면 arr3에 append
행렬곱 풀이는 글로 설명해서는 이해가 잘 안될 것 같다... (행렬곱에 대해 잘 모른다면 아래 링크 참고)
  1. 삼중 반복문을 활용 - (1) arr1의 행 수만큼 반복, (2) arr2의 열 수만큼 반복, (3) arr1의 열 수만큼 반복
  2. 행렬곱이 된 수들을 저장할 배열 tmp, 행렬곱 연산 값을 저장할 정수 val 선언
  3. arr1은 해당 행에서 오른쪽 방향으로, arr2는 해당 열에서 아래 방향으로 연산이 되도록 인덱스 지정 및 연산
  4. arr3의 하나의 행이 완성되면 arr3에 append
  5. arr1의 행 수만큼 반복하면 arr3 완성
 

행렬의 연산(Matrix Operations)

2. 행렬의 연산(Matrix Operations) 연산을 배우기에 앞서 항등관계(=상등관계 : equality)를 규정해보자. 두 행렬와 가 항등관계라고 한다면(같은 행렬이라고 한다면) 차원이 같고, 대응 하는(배열에서

jinconomics.tistory.com

코드

첫 번째 코드는 위의 풀이대로 작성한 것이다. 행렬곱 연산을 차례대로 진행하여 최종 arr3이 완성된다. 그리고 혹시나 해서 numpy 라이브러리로도 가능한지 해봤는데, 사용이 가능했다. 그래서 두 번째 코드는 numpy를 활용하여 numpy 배열로 변환하고 @(행렬곱) 기호를 통해 행렬곱 계산을 해주고 리스트로 변환해 반환한 것이다. 물론 numpy라서 시간도 매우 빠르다! 이래서 numpy를 쓰는 것인가.

def solution(arr1, arr2):
    arr3 = []
    
    for row in range(len(arr1)):
        tmp = []
        for i in range(len(arr2[0])):
            val = 0
            for col in range(len(arr1[0])):
                val += arr1[row][col] * arr2[col][i]
            tmp.append(val)
        arr3.append(tmp)
    return arr3
import numpy as np
def solution(arr1, arr2):
    return (np.array(arr1)@np.array(arr2)).tolist()

'알고리즘 연습 > 프로그래머스' 카테고리의 다른 글

[Python - Lv.3] 정수 삼각형  (2) 2024.04.03
[Python - Lv.3] 이중우선순위큐  (0) 2024.04.02
[Python - Lv.2] 전화번호 목록  (0) 2024.03.21
[Python - Lv.2] 프로세스  (0) 2024.03.20
[Python - Lv.2] 의상  (0) 2024.03.19
'알고리즘 연습/프로그래머스' 카테고리의 다른 글
  • [Python - Lv.3] 정수 삼각형
  • [Python - Lv.3] 이중우선순위큐
  • [Python - Lv.2] 전화번호 목록
  • [Python - Lv.2] 프로세스
기억에 남는 블로그 닉네임
기억에 남는 블로그 닉네임
  • 기억에 남는 블로그 닉네임
    얕게, 깊게
    기억에 남는 블로그 닉네임
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 분류 전체보기
      • Data Engineering
        • Airflow
        • 빅데이터
        • 자동화
        • 기타
      • Infra
        • AWS
        • Terraform
        • [인프라 구축기] Terraform 활용 AWS ..
      • CS
        • 자료구조
        • 알고리즘
        • 네트워크
        • 데이터베이스
        • 이것이 취업을 위한 코딩 테스트다 with 파이썬
      • Python
      • Web
      • Git
      • 기타
        • 취업 & 진로
        • 회고록
        • 기타
      • 프로젝트 단위 공부
        • [부스트코스] DataLit : 데이터 다루기
        • [개인 프로젝트] 공모전 크롤링
        • [개인 프로젝트] FC Online 공식 경기 분..
        • 프로젝트 개선 방안
      • [프로그래머스] 데이터 엔지니어링 데브코스 3기
        • TIL(Today I Learn)
        • 숙제
        • 기타
      • 알고리즘 연습
        • 프로그래머스
        • 백준
  • 링크

    • 깃허브
    • 링크드인
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기억에 남는 블로그 닉네임
[Python - Lv.2] 행렬의 곱셈
상단으로

티스토리툴바