[프로그래머스 / 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] 영어 끝말잇기 (파이썬)
듬듬
듬듬
  • 듬듬
    두드림
    듬듬
  • 전체
    오늘
    어제
    • 분류 전체보기 (280)
      • 📑 신입일기 (35)
      • 🍪 Web (1)
        • angular (1)
        • JavaScript (0)
      • 🧩 Node.js 공부 (2)
      • 🎲 알고리즘 공부 (192)
        • 프로그래머스 (76)
        • 백준 (96)
        • 코드업 (19)
      • 🎨 Tistory Customizing (1)
      • 💌 일상 (12)
        • 일상 (5)
        • 기록 (7)
      • 📜 자격증 (2)
        • 정보처리기사 (2)
      • 📗 spring boot 공부 (9)
      • 학교 공부 (20)
        • ICT 개론 (14)
        • 리눅스 (6)
      • ChatGPT 랑 놀기 (0)
  • 블로그 메뉴

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

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바