[프로그래머스 / Level 2] 행렬의 곱셈 (파이썬)

2022. 9. 28. 22:34·🎲 알고리즘 공부/프로그래머스

[문제 요약]

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.

 

제한 조건

  • 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
  • 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
  • 곱할 수 있는 배열만 주어집니다.

 

입출력 예시

 

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/12949

 

프로그래머스

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

programmers.co.kr


🎨 풀이

💡 전체 코드

def solution(arr1, arr2):
    answer = [[0 for _ in range(len(arr2[0]))] for _ in range(len(arr1))]
    
    # 행렬의 곱셈 식 그대로 코드 작성
    for i in range(len(arr1)):
        for j in range(len(arr2[0])):
            for k in range(len(arr2[0])):
                answer[i][j] += arr1[i][k] * arr2[k][j]

    return answer

> 핵심 : 행렬의 곱셈 식 파악!

 

이해를 돕기 위한 그림

 

🍦 코드 설명 (실행 순서대로 나열)

#solution

	answer = [[0 for _ in range(len(arr2[0]))] for _ in range(len(arr1))]

1. answer의 틀을 잡는다.

  - ( l * n == len(arr1) * len(arr2[0]) 인데, len(arr2[0))가 len(arr1)개 있는 리스트 형태로 나타내기 위해 위와 같이 코딩을 했다.

 

 

    # 행렬의 곱셈 식 그대로 코드 작성
    for i in range(len(arr1)):
        for j in range(len(arr2[0])):
            for k in range(len(arr2[0])):
                answer[i][j] += arr1[i][k] * arr2[k][j]

    return answer

# 행렬의 곱셈

2. answer[i][j]에 arr[i][k] * arr2[k][j]를 더해주면 된다.

 - 위에 나와있는 그림을 보면 이해가 쉽다. i는 len(arr1), k는 len(arr2[0]), j는 len(arr2[0])이다.

 - 이 때, k 범위에 len(arr2[0]) 대신 len(arr1)을 써도 된다.

 

3. answer을 return 해준다!


 

참고한 블로그 : https://j1w2k3.tistory.com/575

 

[행렬 이론 03탄] 행렬의 연산 (곱셈)

    주요 목표      주요한 개념에 대한 간결한 이해를 돕기 위해서 기본 론을 주제별로 나누어서 정리를 하고자 만들어 보았습니다. 주요내용 행렬의 곱셈의 원리와 계산방법 주로 행렬의 연

j1w2k3.tistory.com

 

 

⭐ 느낀점

> 살짝 하나하나 해보면서 감을 잡았던 것 같다. 행렬은 적지 않게 봤는데도 볼 때마다 어떻게 푸는 지 모르겠다. ㅋㅋㅋ 맨날 리셋되는 기분이다 ㅠㅠ 파이팅해보자 파이팅!

저작자표시 (새창열림)

'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글

[프로그래머스 / 입문] 모스부호 (1) (파이썬)  (2) 2022.09.30
[프로그래머스 / 입문] 배열 두 배 만들기 (파이썬)  (0) 2022.09.29
[프로그래머스 / Level 2] 프린터 (파이썬)  (0) 2022.09.26
[프로그래머스 / Level 2] 영어 끝말잇기 (파이썬)  (0) 2022.09.24
[프로그래머스 / Level 2] 카펫 (파이썬)  (0) 2022.09.23
'🎲 알고리즘 공부/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 / 입문] 모스부호 (1) (파이썬)
  • [프로그래머스 / 입문] 배열 두 배 만들기 (파이썬)
  • [프로그래머스 / Level 2] 프린터 (파이썬)
  • [프로그래머스 / Level 2] 영어 끝말잇기 (파이썬)
듬듬
듬듬
  • 듬듬
    두드림
    듬듬
  • 전체
    오늘
    어제
    • 분류 전체보기 (267)
      • 📑 신입일기 (35)
      • 🎲 알고리즘 공부 (192)
        • 프로그래머스 (76)
        • 백준 (96)
        • 코드업 (19)
      • 📘 독서 (0)
      • 💌 일상 (12)
        • 일상 (5)
        • 기록 (7)
      • 📜 자격증 (2)
        • 정보처리기사 (2)
      • 학교 공부 (20)
        • ICT 개론 (14)
        • 리눅스 (6)
      • ChatGPT 랑 놀기 (0)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    카카오
    정보처리기사
    오버워치
    코민이
    연습문제
    컨텐더스
    스프링 부트
    찬양추천
    정처기
    50문답
    코린이
    codeup
    BOJ
    티스토리챌린지
    백준
    오블완
    스프링부트
    nodejs
    폰켓몬
    파이썬
    충무로
    6월 목표
    til
    일기
    행렬덧셈
    코테
    프로그래머스
    신입일기
    코드업
    피보나치수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
듬듬
[프로그래머스 / Level 2] 행렬의 곱셈 (파이썬)
상단으로

티스토리툴바