Coding Test Study - 6주차

Checking·2021년 5월 24일
0

Coding Test Study

목록 보기
6/22

힙(Heap)

디스크 컨트롤러

#include <string>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

struct cmp{
    bool operator() (pair<int, int> a, pair<int, int> b) {
        return a.second >= b.second;
    }
};

int solution(vector<vector<int>> jobs) {
    int answer = 0;
    int jobs_size = jobs.size();
    int times = 0;

    priority_queue<pair<int, int>, vector<pair<int, int>>, cmp> can_work_list;

    sort(jobs.begin(), jobs.end(), [] (vector<int> a, vector<int> b) {return a[0] > b[0];});

    while (jobs.size() + can_work_list.size()) {
        if (can_work_list.empty() && jobs.back()[0] > times) times = jobs.back()[0];

        while (!jobs.empty() && jobs.back()[0] <= times) {
            can_work_list.push({jobs.back()[0], jobs.back()[1]});
            jobs.pop_back();
        }

        auto now_working = can_work_list.top();
        can_work_list.pop();

        times += now_working.second;
        answer += times - now_working.first;
    }

    return answer / jobs_size;
}
정확성  테스트
  테스트 1 〉	통과 (0.37ms, 3.96MB)
  테스트 2 〉	통과 (0.31ms, 3.82MB)
  테스트 3 〉	통과 (0.27ms, 3.94MB)
  테스트 4 〉	통과 (0.24ms, 3.71MB)
  테스트 5 〉	통과 (0.31ms, 3.97MB)
  테스트 6 〉	통과 (0.02ms, 3.95MB)
  테스트 7 〉	통과 (0.23ms, 3.96MB)
  테스트 8 〉	통과 (0.19ms, 3.97MB)
  테스트 9 〉	통과 (0.06ms, 3.97MB)
  테스트 10 〉	통과 (0.40ms, 3.94MB)
  테스트 11 〉	통과 (0.01ms, 3.94MB)
  테스트 12 〉	통과 (0.01ms, 3.96MB)
  테스트 13 〉	통과 (0.02ms, 3.9MB)
  테스트 14 〉	통과 (0.01ms, 3.95MB)
  테스트 15 〉	통과 (0.01ms, 3.97MB)
  테스트 16 〉	통과 (0.01ms, 3.96MB)
  테스트 17 〉	통과 (0.01ms, 3.95MB)
  테스트 18 〉	통과 (0.01ms, 3.96MB)
  테스트 19 〉	통과 (0.01ms, 3.78MB)
  테스트 20 〉	통과 (0.01ms, 3.96MB)

채점 결과
  정확성: 100.0
  합계: 100.0 / 100.0

이중우선순위큐

#include <string>
#include <vector>
#include <list>

using namespace std;

vector<int> solution(vector<string> operations) {

    list <int> num_list;

    for (int i=0; i<operations.size(); i++) {
        switch (operations[i][0]) {
            case 'I':
                num_list.push_back(stoi(operations[i].replace(0, 2, "")));
                num_list.sort();
                break;
            case 'D':
                if (!num_list.empty()) {
                    if (operations[i] == "D 1") {
                        num_list.pop_back();
                    } else if (operations[i] == "D -1") {
                        num_list.pop_front();
                    }
                }
                break;
        }
    }
    
    if (num_list.empty()) return {0, 0};
    else return {num_list.back(), num_list.front()};
}
정확성  테스트
  테스트 1 〉	통과 (0.02ms, 3.97MB)
  테스트 2 〉	통과 (0.02ms, 3.96MB)
  테스트 3 〉	통과 (0.02ms, 3.95MB)
  테스트 4 〉	통과 (0.01ms, 3.71MB)
  테스트 5 〉	통과 (0.02ms, 3.96MB)
  테스트 6 〉	통과 (0.04ms, 3.96MB)

채점 결과
  정확성: 100.0
  합계: 100.0 / 100.0
profile
(ง ᐖ)ว

0개의 댓글