일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 코딩테스트
- 프로그래머스 #카카오 #IT #코딩테스트
- 카카오
- springboot
- programmers
- 알고리즘
- 리눅스
- 엘라스틱서치
- 개발자
- Java
- 프로그래머스
- 운영체제
- Kakao
- IT
- 네트워크
- 파이썬
- Linux
- 백엔드
- Python
- 도커
- C
- docker
- Spring
- 캐시
- 스프링부트
- Elasticsearch
- 자바
- 스프링
- 쿠버네티스
- DPDK
- Today
- Total
저고데
[프로그래머스]행렬의 곱셈 본문
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12949
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제를 요약하자면 다음과 같다.
두 행렬이 주어질 때, 두 행렬을 곱한 값을 반환하는 것이다.
우선, 해당 문제를 풀기 위해서는 행렬의 곱셈은 어떻게 이루어지는 지에 대해서 알아야한다.
두 행렬 A, B가 주어졌다고 하자.
A = 1, 2, 3 B = 7, 8
4, 5, 6 9, 10
11, 12
A*B = (1*7+2*9+3*11) (1*8+2*10+3*12)
(4*7+5*9+6*11) (4*8+5*10+6*12)
A는 1번 열을 먼저 선택하고 B는 1번 행을 선택하여 곱해주고 더한 값이 1열 1행의 값이 된다.
따라서, A*B의 행의 갯수는 B의 행의 갯수가 되고, 열의 갯수는 A의 열의 갯수가 된다.
코드를 작성하기 위한 순서는 다음과 같다.
1. 열과 행의 갯수는 지정해준다.
2. 행렬의 곱셈 원리를 따라서, 우선 A행의 열의 갯수에 따른 조건문을 하나 만들어준다.
3. 그리고 B의 행의 갯수에 따른 조건문도 하나 만들어준다.
4. A의 한 열을 선택하면 그 열 안에서 행마다 선택을 또 해주어야 하기 때문에 A의 행의 갯수에 따른 조건문을 하나 만들어준다.
def solution(arr1, arr2):
answer = [[0 for _ in range(len(arr2[0]))] for _ in range(len(arr1))] #1번
for i in range(len(arr1)): #2번
for j in range(len(arr2[0])): #3번
for k in range(len(arr1[0])): #4번
answer[i][j]+=arr1[i][k]*arr2[k][j]
return answer
본 문제는 머릿속으로 코드를 작성하는 것보다 그림을 그리면서 풀이를 하는 것이 훨씬 더 수월했다.
행렬의 곱셈의 원리를 안다고 해서 무조건 풀 수 있는 문제는 아니었던 것 같다.
필자의 설명이 많이 부족하기 하지만 도움이 되었으면 좋겠다.(타인을 이해시키는 건 너무 어려워요 ㅠㅠ)
'프로그래머스' 카테고리의 다른 글
[프로그래머스]두 큐 합 같게 만들기 (1) | 2023.01.19 |
---|---|
[프로그래머스]징검다리 건너기 (0) | 2023.01.19 |
[프로그래머스]위장 (0) | 2023.01.18 |
[프로그래머스]문자열 내 마음대로 정하기 (1) | 2023.01.18 |
[프로그래머스]시저암호 (1) | 2023.01.18 |