반응형
🔍 문제 요약
https://school.programmers.co.kr/learn/courses/30/lessons/12949
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
2차원 행렬 arr1과 arr2를 곱한 결괄르 반환하는 문제
🧠 나의 접근 방식과 시행착오
행렬의 곱셈에 대해서 어떻게 했는지 까먹었어서 시간이 오래 잡아먹은 문제.. 잘 기억해두자.. 풀어서 통과하긴 한 문제. 2차원 행렬이고 인덱스가 곱했을 때 어떻게 저장되는지 순간 헷갈려서 실수하기 좋은데 그림으로 잘 생각해보면 어렵지 않게 풀 수 있는 문제긴 하다.
/// <summary>
/// 행렬의 곱셈
/// https://school.programmers.co.kr/learn/courses/30/lessons/12949
/// </summary>
public int[,] solution(int[,] arr1, int[,] arr2)
{
// 행렬의 곱셈은 arr1의 i행과 arr2의 i열을 곱한 합을 도출
int[,] answer = new int[arr1.GetLength(0), arr2.GetLength(1)];
for (int i = 0; i < arr1.GetLength(0); i++)
{
for (int k = 0; k < arr2.GetLength(1); k++)
{
for (int j = 0; j < arr2.GetLength(0); j++)
{
answer[i, k] += (arr1[i, j] * arr2[j, k]);
}
}
}
return answer;
}
✅ 풀이 코드
GetLength 계산이 for 안에서 하지 않고 밖으로 빼서 여러번 연산되는 것을 피하는 것 정도를 피드백으로 줬다.
public int[,] solution(int[,] arr1, int[,] arr2)
{
int row1 = arr1.GetLength(0);
int col1 = arr1.GetLength(1);
int col2 = arr2.GetLength(1);
int[,] answer = new int[row1, col2];
for (int i = 0; i < row1; i++)
{
for (int k = 0; k < col2; k++)
{
int sum = 0;
for (int j = 0; j < col1; j++)
{
sum += arr1[i, j] * arr2[j, k];
}
answer[i, k] = sum;
}
}
return answer;
}
추가로 gpt가 준 팁으로는 C#에서는 Jagged Array라는 것이 있고 성능상 빠르다고 한다. (써본 적이 없는 기능이긴 해서 써보고 판단해야 할 듯 함)
🔄 정리
2차원 행렬의 곱에 대해서 까먹기 쉬운데 잘 생각해두자.
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[Lv.1] 짝수와 홀수 [프로그래머스_코딩테스트] [조건문] [5분] (0) | 2025.07.01 |
---|---|
[Lv.1] 수박수박수박수박수박수? [프로그래머스_코딩테스트] [문자열] [10분] (0) | 2025.06.30 |
[Lv.1] 핸드폰 번호 가리기 [프로그래머스_코딩테스트] [문자열] [10분] (0) | 2025.06.30 |
[Lv.2] 의상 [프로그래머스_코딩테스트] [해시] [25분] (0) | 2025.06.29 |
[Lv.1] 없는 숫자 더하기 [프로그래머스_코딩테스트] [수학] [10분] (0) | 2025.06.27 |