강의로 돌아가기
김동우

C++ 효율성 테스트 시간초과

효율성 테스트에서 시간초과되는데 연산을 일일이 적용하지 않는 풀이가 있나요..?

작성중인 코드―solution.cpp
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
31
32
33
34
35
36
37
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

void shiftrow(vector<vector<int>>& v) {
    int row = v.size();
    vector<int> temp {begin(v[0]), end(v[0])};
    for(int i = 1; i != row; ++i)
        swap_ranges(begin(v[i]), end(v[i]), begin(temp));
    v[0].assign(begin(temp), end(temp));
}

void rotate(vector<vector<int>>& v) {
    int row = v.size(), col = v[0].size();
    int temp = v[0][0];
    for(int i = 1; i != col; ++i)
        swap(v[0][i], temp);
    for(int i = 1; i != row; ++i)
        swap(v[i][col - 1], temp);
    for(int i = col - 2; i >= 0; --i)
        swap(v[row - 1][i], temp);
    for(int i = row - 2; i > 0; --i)
        swap(v[i][0], temp);
    v[0][0] = temp;
}

vector<vector<int>> solution(vector<vector<int>> rc, vector<string> operations) {
    for(const string& op : operations) {
        if(op == "ShiftRow")
            shiftrow(rc);
        else // op == "Rotate"
            rotate(rc);
    }
    return rc;
}
  • 임형섭

    효율성 테스트 4,5,6 번 시간초과 나시는거죠..? ㅠㅠ 저도.. 시간초과가 나는데 제 코드는 행열 배열 연결리스트 초기화 O(NM) <= 10만 명령어 배열 O(N) <= 10만 결합 O(N) <= 5만 Rotate , ShiftRow 함수 O(1) 이라서 통과할 줄 알았는데 안되네요 ㅠㅠ

    임형섭―Aug 19, 2022 22:11
  • 하동완

    명령어를 효율적으로 처리하기 위한 방법, 그리고 모든 원소를 1:1로 일일이 옮기는 연산을 피하는 방법을 찾아봅시다...

    하동완―Nov 29, 2022 21:49
0 개의 답변
답변 쓰기
This input form supports markdown syntax. Please refer to 마크다운 가이드.