[Programmers] Lv2. ํ๋ ฌ์ ๊ณฑ์
| C++
2023. 6. 15. 17:33ใCoding Test/Programmers
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐จ๐ปํ์ด ๊ณผ์
ํ๋ ฌ A์ ํ๋ ฌ B๊ฐ ์๋ค๊ณ ํ ๋, ๋ค์๊ณผ ๊ฐ์ด ๊ณฑ์ ์ ์งํํฉ๋๋ค.
// ํ๋ ฌ A // ํ๋ ฌ B
2 3 2 5 4 3
4 2 4 X 2 4 1
3 1 4 3 1 1
------------------------------------------------------------------------------
/* A์ i๋ฒ ํ๊ณผ B์ j๋ฒ ์ด ์์๋ค์ ๊ฐ๊ฐ ๊ณฑํ์ฌ ํฉํ๊ธฐ */
(2 x 5) + (3 x 2) + (2 x 3) = 22 // A์ 0ํ x B์ 0์ด
(2 x 4) + (3 x 4) + (2 x 1) = 22 // A์ 0ํ x B์ 1์ด
(2 x 3) + (3 x 1) + (2 x 1) = 11 // A์ 0ํ x B์ 2์ด
-> [22, 22, 11]
(4 x 5) + (2 x 2) + (4 x 3) = 36 // A์ 1ํ x B์ 0์ด
(4 x 4) + (2 x 4) + (4 x 1) = 28 // A์ 1ํ x B์ 1์ด
(4 x 3) + (2 x 1) + (4 x 1) = 18 // A์ 1ํ x B์ 2์ด
-> [36, 28, 18]
A์ ๋ง์ง๋ง ํ๋ ์์ ๊ฐ์ด ์งํํ๋ฉด,
-> [29, 20, 14]
๋ฐ๋ผ์, ๊ณฑ์
๊ฒฐ๊ณผ๋ก ์ป๋ ํ๋ ฌ์ ๋ค์๊ณผ ๊ฐ๋ค.
22 22 11
36 28 18
29 20 14
๊ทธ๋ ๋ค๋ฉด, ์ฌ๊ธฐ์ ํ์ํ ๊ฑด ๋ค์๊ณผ ๊ฐ์ ํจ์๋ค์ ๋๋ค.
- ๋ฒกํฐ A์ ๋ฒกํฐ B์ ๋ด์ ์ ๊ณ์ฐํด์ค DotProduct()
// ๋ ๋ฒกํฐ์ ๊ธธ์ด๋ ๊ฐ์์ผ ํจ
[1, 2, 3] // ๋ฒกํฐ A
[4, 5, 6] // ๋ฒกํฐ B
๋ด์ = (1 x 4) + (2 x 5) + (3 x 6)
- ํ๋ ฌ arr2์ ํ๊ณผ ์ด์ ํํ๋ฅผ ๋ฐ๊ฟ์ฃผ๋ TransposedMatrix() -> ์ฌ์ค ReShape()์ด ๋ ๋ง์ ๊ฒ ๊ฐ๊ธด ํฉ๋๋ค.
// ํ๋ ฌ B๋ ์ด ๋ฐฉํฅ์ผ๋ก ์ฝ์ผ๋ฏ๋ก, ์ฝ๋์์ ๋ฒกํฐ๋ฅผ ํ๋์ฉ ๊บผ๋ด์ ๋ด์ ๊ณ์ฐํ๊ธฐ ์ฝ๊ฒ ํ๊ธฐ ์ํด
// ๋ณํํด์ฃผ๋ ๊ฒ์
๋๋ค.
1 4 1 2 3
2 5 -> 4 5 6
3 6
์ ๋ด์ฉ๋ค์ ๋ฐํ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ฉ๋๋ค.
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <vector>
using namespace std;
using Matrix = vector<vector<int>>;
int DotProduct(const vector<int>& vec1, const vector<int>& vec2) {
int sum = 0;
for (int i = 0; i < vec1.size(); i++)
sum += (vec1[i] * vec2[i]);
return sum;
}
Matrix TransposedMatrix(const Matrix& originMatrix) {
Matrix result;
int originRow = originMatrix.size();
int originCol = originMatrix[0].size();
// ์ด ๋ฐฉํฅ์ผ๋ก ์ฝ๊ธฐ
for (int c = 0; c < originCol; c++) {
vector<int> row;
for (int r = 0; r < originRow; r++)
row.push_back(originMatrix[r][c]);
result.push_back(row);
}
return result;
}
vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
Matrix answer;
Matrix transposedArr2 = TransposedMatrix(arr2);
for (int a1i = 0; a1i < arr1.size(); a1i++) {
vector<int> row;
for (int a2i = 0; a2i < transposedArr2.size(); a2i++) {
int sum = DotProduct(arr1[a1i], transposedArr2[a2i]);
row.push_back(sum);
}
answer.push_back(row);
}
return answer;
}
728x90
๋ฐ์ํ
'Coding Test > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] Lv2. ๊ธฐ๋ฅ๊ฐ๋ฐ | C++ (0) | 2023.06.16 |
---|---|
[Programmers] Lv2. ์์ | C++ (0) | 2023.06.15 |
[Programmers] Lv2. n^2 ๋ฐฐ์ด ์๋ฅด๊ธฐ | C++ (0) | 2023.06.14 |
[Programmers] Lv2. ์ฐ์ ๋ถ๋ถ ์์ด ํฉ์ ๊ฐ์ | C++ (1) | 2023.06.14 |
[Programmers] Lv2. ๊ตฌ๋ช ๋ณดํธ | C++ (0) | 2023.06.13 |