ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [PS] 백준 17390번: 이건 꼭 풀어야 해! (입출력 관련)
    문제해결 2023. 11. 9. 16:40

    이건 꼭 풀어야 해!

     

    엄청 쉬운 문제인데 입출력 관련 이슈를 깨달아서 블로그 쓴다.

     

    아래 코드로 시간초과가 나는데 30만개를 정렬만 해주는 코드가 1초가 넘을리가 없고 너무 이상했다.

    #include <bits/stdc++.h>
    using namespace std;
    
    #define FOR(i, n) for(int i = 0; i < int(n); i++)
    #define endl "\n"
    
    int N, Q;
    int arr[300'000];
    int sum[300'000];
    
    int main() {
        cin >> N >> Q;
        FOR(i, N) cin >> arr[i];
        sort(&arr[0], &arr[N]);
    
        sum[0] = arr[0];
        for(int i = 1; i < N; i++) sum[i] = sum[i - 1] + arr[i];
    
        FOR(i, Q) {
            int begin, end; cin >> begin >> end;
            begin -= 1, end -= 1;
            cout << sum[end] - (begin - 1 < 0 ? 0 : sum[begin - 1]) << endl;
        }
        
        return 0;
    }

     

     

    그래서 혹시 몰라서

    cin.tie(NULL)->sync_with_stdio(false);

    이걸 추가해주니 바로 통과되었다.

    #include <bits/stdc++.h>
    using namespace std;
    
    #define FOR(i, n) for(int i = 0; i < int(n); i++)
    #define endl "\n"
    
    int N, Q;
    int arr[300'000];
    int sum[300'000];
    
    int main() {
        cin.tie(NULL)->sync_with_stdio(false);
        cin >> N >> Q;
        FOR(i, N) cin >> arr[i];
        sort(&arr[0], &arr[N]);
    
        sum[0] = arr[0];
        for(int i = 1; i < N; i++) sum[i] = sum[i - 1] + arr[i];
    
        FOR(i, Q) {
            int begin, end; cin >> begin >> end;
            begin -= 1, end -= 1;
            cout << sum[end] - (begin - 1 < 0 ? 0 : sum[begin - 1]) << endl;
        }
        
        return 0;
    }

     

     

    인풋을 미리 다 담아두고 하나씩 불러오도록 이렇게 처리해보니깐 이건 시간초과가 안뜨긴 하는데,

    이전 코드가 0.1초 걸렸던거에 비해 0.4초나 걸렸다.

    cin.tie(NULL)->sync_with_stdio(false);

    앞으로 이거 꼭 써야겠다.

    #include <bits/stdc++.h>
    using namespace std;
    
    #define FOR(i, n) for(int i = 0; i < int(n); i++)
    #define endl "\n"
    
    int N, Q;
    int arr[300'000];
    int sum[300'000];
    vector<pair<int, int>> vpi;
    
    int main() {
        cin >> N >> Q;
        FOR(i, N) cin >> arr[i];
        FOR(i, Q) {
            pair<int, int> p; cin >> p.first >> p.second;
            vpi.push_back(p);
        }
    
        sort(&arr[0], &arr[N]);
    
        sum[0] = arr[0];
        for(int i = 1; i < N; i++) sum[i] = sum[i - 1] + arr[i];
    
        FOR(i, Q) {
            auto [begin, end] = vpi[i];
            begin -= 1, end -= 1;
            cout << sum[end] - (begin - 1 < 0 ? 0 : sum[begin - 1]) << endl;
        }
        
        return 0;
    }

     

Designed by Tistory.