프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
행렬의 곱셈이란?
- 이 문제를 쉽게 풀기 위해서는 행렬의 곱셈을 어떻게 하는지 아는 것이 필요하다.
- 행렬 A(XxY)와 행렬 B(YxZ)를 곱할 때 중요한 것은 Y값이 같아야 한다는 점이다.
- 아래의 그림과 같이 A의 가로줄과 B의 세로줄을 계산하여 행렬의 곱셈을 구할 수 있다.

풀이 설계
- for문으로 돌아가면서 차례대로 answer 배열을 만든다.
- answer 배열은 arr1의 행(가로) x arr2의 열(세로)로 만들어진다.
- answer을 구성하는 값은 각각을 곱한 값의 합이므로 합을 구할 for문은 arr1의 열(세로)이자 arr2의 행(가로)이다.
- for문을 3번 실행하여 answer를 구한다.
- 합을 구하는 공식은 arr1[i][k]*arr2[k][j]
풀이
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
tm = []
for j in range(len(arr2[0])):
summ = 0
for k in range(len(arr1[0])):
summ += arr1[i][k]*arr2[k][j]
tm.append(summ)
answer.append(tm)
return answer
다른 풀이
- 삼중for문이 좋은 방법인가라는 생각에 다른 풀이를 찾아봤더니 zip을 사용한 풀이를 발견했다.
- 결론적으로 시간적으로 볼 때는 큰 차이가 없는거 같다.
- zip을 사용해서 행과 열을 바꾸어 곱하고 합한 값으로 결과를 도출하는 방법이다.
def productMatrix(X, Y):
result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X]
return result


후기
- 행렬의 곱셈을 어떻게 하더라... 부터 막혀서 공식을 찾아봤다.
- 초반에 어느값을 곱하고 더하는지 헷갈려서 그렇지 문제 자체는 쉬운 것 같았다.
- zip에 대해 알게 되었다.
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 튜플 - 파이썬(python) (0) | 2024.01.12 |
---|---|
[프로그래머스] 기능개발 - 파이썬(python) (0) | 2024.01.11 |
[프로그래머스] H-Index - 파이썬(python) (1) | 2024.01.09 |
[프로그래머스] n^2 배열 자르기 - 파이썬 (python) (0) | 2024.01.08 |
[프로그래머스] 괄호 회전하기 - 파이썬 (python) (0) | 2024.01.07 |
댓글