728x90
반응형
1. 문제
- n^3(Cubic complexity)를 만족하는 3중 for루프 곱(2차 행렬 a, b, c 곱셈)
- Cubic complextiy 알고리즘의 경우 n=10, 50, 100, 150, 200 을 사용하여 결과 출력
입력 행렬의 크기가 달라져야하기 때문에 크기가 가변적인 벡터를 사용해서 할 것임
int SIZE = 200;
vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
vector<vector<int>> ans(arr1.size(), vector<int>(arr2[0].size(), 0)); //2차원 배열 선언, 0으로 초기화
// arr1의 i행, arr2의 j열을 곱한다
// 인덱스 이동은 k
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
int sum = 0;
for (int k = 0; k < SIZE; k++) {
sum += arr1[i][k] * arr2[k][j];
}
ans[i][j] = sum;
}
}
return ans;
}
int 형 2차원 벡터 2개를 받아 행렬 곱셈 연산을 수행한다. 이 때 나타내져야하는 인덱스는 3가지이다. 한가지는 한 행렬의 크기를 나타내는 인덱스, 다른 행렬의 크기를 나타내는 인덱스, 행렬 간 연산을 하면서 곱해지는 인덱스가 0 -> 1->2로 이동을 하는데 이 이동을 의미하는 인덱스 총 3가지이다.
void main() {
clock_t start, finish;
double duration;
start = clock();
//make matrix
vector<std::vector<int>> A(SIZE, std::vector<int>(SIZE, 2));
vector<std::vector<int>> B(SIZE, std::vector<int>(SIZE, 2));
vector<std::vector<int>> C(SIZE, std::vector<int>(SIZE, 2));
vector<vector<int>> ans = solution(A, B);
vector<vector<int>> result = solution(ans, C);
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
cout << duration << "초" << endl;
}
위에 작성한 함수를 메인 함수에서 실행시키면 문제없이 작동한다.
728x90
반응형
'c++ > 알고리즘' 카테고리의 다른 글
백준2178번-미로BFS (0) | 2022.03.28 |
---|---|
shell sort c++ (0) | 2022.03.23 |
백준 9996 (0) | 2022.03.19 |
백준 1159 (0) | 2022.03.18 |
피보나치 수열 (0) | 2022.03.16 |
댓글