728x90
처음 든 생각
- 먼저 행렬 연산을 손으로 직접 써보자
- arr1에서 행을 선택한 후 arr2에서 열 별로 순차적으로 곱해서 더해주면 된다. (아래 그림과 같은 동작)
- arr1의 행 별 반복문(1), arr2의 열 별 반복문(2), 열 안에 행 별 반복문(3) 총 3단계의 반복문이 등장해야겠다.
나의 답
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
arr = []
for j in range(len(arr2[0])):
tmp = 0
for k in range(len(arr2)):
tmp += (arr1[i][k] *arr2[k][j])
arr.append(tmp)
answer.append(arr)
arr=[]
return answer
arr1의 행 별 반복문으로 크게 감싼 후 범위 지정 -> 반복문 (1)
연산 결과를 한 행 씩 출력해서 append를 해야하므로 빈 리스트 선언해준다.
arr2의 열 별 반복문 감싼 뒤 범위 지정 -> 반복문 (2)
곱셈 연산 결과값을 담기 위한 임시 변수 1개 선언
arr2의 열 안 에서 행 별 반복문 감싼 뒤 범위 지정 -> 반복문 (3)
곱한 값을 다 더해주어 행 별로 연산 마치고 정답 리스트에 추가
행렬 연산의 순서에 따라 반복문의 범위를 지정해주는 것이 굉장히 헷갈렸다. 실제로 처음 했을 때는 인덱스의 오류로 런타임 에러가 났었는데 반복문 (2)의 범위를 arr1[0]으로 실수했었다. 어떤 배열의 행인지 열인지 잘 확인하면서 순서대로 범위, 인덱싱을 잘하자.
728x90
'스터디 > 코딩테스트' 카테고리의 다른 글
python 코딩테스트 - 프로그래머스 전력망을 둘로 나누기 (0) | 2023.11.16 |
---|---|
python 코딩테스트 - 프로그래머스 할인 행사 (1) | 2023.11.14 |
python 코딩테스트 - 프로그래머스 네트워크 (2) | 2023.11.13 |
python 코딩테스트 - 프로그래머스 카펫 (2) | 2023.11.12 |
python 코딩테스트 - 소수 찾기 (0) | 2023.11.12 |