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

Lv2. 행렬의 곱셈

  • -
728x90
반응형

문제 보기 :  행렬의 곱셈

 

프로그래머스

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

programmers.co.kr


문제

  • 정답률 : 65%

작성 코드

def solution(arr1, arr2):
    
    k = [] ; idx=0
    for ar1 in arr1:
        new = []
        idx_ar2 = 0
        while len(new) != len(arr2[0]):
            value = 0 ; idx = 0
            for ar2 in arr2:
                value += ar1[idx]*ar2[idx_ar2] #2x5+3x2+2*3 // #1*3+4*3
                idx+=1
            new.append(value)
            idx_ar2 += 1
        k.append(new)
        
    return k

풀이

수학과 출신으로쒀 눈길이 가서 도전했지만 땀만 열심히 흘린 문제엿다..;;
전에 해봤던거같은데 왜이렇게 헷갈리는건지 ㅎ..

2 4 3 | 5 2 3
3 2 1 | 4 4 1
2 4 4 | 3 1 1

만약 arr1 = [[2, 3, 2], [4, 2, 4], [3, 1, 4]]

arr2 = [[5, 4, 3], [2, 4, 1], [3, 1, 1]]

return = [[22, 22, 11], [36, 28, 18], [29, 20, 14]]

이렇게 주어졌다면 arr1의 [2, 3, 2]와 arr2의 리스트 각 0번째, 1번째, 2번째 원소를 곱한 뒤 더하는게 행렬의 곱셈법이다.

→ return 첫번째 리스트의 첫번째 원소는 2*5+3*2+2*3으로 생성된 셈이다.

 

코드는 생각보다 복잡했다. 인덱스가 많이 등장하고, for문과 while문을 얼마나 써야할지 감이 안잡혀서 아무리 예제를 많이 써보고 여러번 코드를 써봐도 시간이 오래 걸렸다.

 

그래서 생각해낸 방법이 arr1과 arr2의 인덱스 명령어를 아예 선언해버리는 것.

arr1는 idx로, arr2는 idx_ar2로 선언한 뒤
arr1에 대한 for문과 내부에 while문을 배치해 행렬 곱의 값들을 구했다.

320x100
728x90

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

Lv2. 피로도  (0) 2024.07.17
Lv2. n^2 배열 자르기  (0) 2024.07.16
Lv2. N개의 최소공배수  (0) 2024.07.15
Lv2. 점프와 순간이동  (0) 2024.07.15
Lv1. 실패율  (0) 2024.07.13
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.