본문 바로가기

코딩테스트/프로그래머스

[프로그래머스] 행렬의 곱셈(python)

행렬의 곱셈(python)

 

문제


풀이

  • 행렬 곱에 대해 알아야 하는 문제였습니다.
  • 위의 풀이는 제출 시 런타임에러가 났는데, 불필요하게 append()함으로써 난 것으로 파악했습니다.
  • 아래 풀이처럼 미리 행렬 arr1과 arr2의 행과 열의 수를 변수로 선언해 두고.
  • 결과를 저장할 answer 리스트를 초기화함으로써 해결할 수 있습니다.
# 깔끔한 풀이
def solution(arr1, arr2):
  # arr1과 arr2의 행과 열의 길이를 변수로 선언
  r1, c1 = len(arr1), len(arr1[0])
  r2, c2 = len(arr2), len(arr2[0])
  
  # 결과를 저장할 2차원 리스트 초기화
  answer = [[0] * c2 for _ in range(r1)]

  # arr1의 각 행과 arr2의 각 열에 대해
  for i in range(r1):
    for j in range(c2):
      # 두 행렬의 데이터를 곱해 결과 리스트에 더해줌
      for k in range(c1):
        ret[i][j] += arr1[i][k] * arr2[k][j]
  return answer

💡문제를 나눠서 하나씩 풀어나가는 것이 중요.

✔️ 반복문 내에서 변수를 사용하지 않는다면 for _ in range 구문 사용.

✔️ N은 행 혹은 열의 길이. 각각 세 번씩 순회하므로 시간복잡도는 O(N^3)