๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90
๐Ÿ”—๋ฌธ์ œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๐Ÿ‘จ‍๐Ÿ’ปํ’€์ด ๊ณผ์ •

 

ํ–‰๋ ฌ 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
๋ฐ˜์‘ํ˜•