[힙] 디스크 컨트롤러

yerin6860·2020년 8월 9일
0

프로그래머스

목록 보기
10/30
post-thumbnail

|| 문제설명 ||

  1. 하드디스크는 한 번에 하나의 작업만 수행할 수 있다.
  2. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있지만 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것이다.
  3. 작업의 요청부터 종료까지 걸린 시간의 평균을 가장 줄이는 방법으로 처리하면 평균이 얼마가 되는지 return 하도록 solution 함수를 작성하라.(단, 소수점 이하의 수는 버린다.)
  • jobs : 각 작업에 대해 [작업이 요청되는 시점, 작업의 소요시간]을 담은 2차원 배열
_ jobs의 길이 : 1 이상 500 이하
_ jobs[i] = [작업이 요청되는 시점, 작업의 소요시간]
_ 각 작업에 대해 작업이 요청되는 시간 : 0 이상 1,000 이하
_ 각 작업에 대해 작업의 소요시간 : 1 이상 1,000 이하
_ 하드디스크가 작업을 수행하고 있지 않을 때에는 먼저 요청이 들어온 작업부터 처리

|| 문제해결과정 ||

- 들어온 순서대로 작업시간이 적은 순부터 처리
- priotiry_queue<int> 생성(오름차순)
- for문

|| 코드 ||

[2020.08.09] 실패(segmentation fault)

#include <string>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
// 들어온 순서대로  작업시간이 적은 순부터 처리
using namespace std;

bool compare(const pair<int, int>& a, const pair<int, int>& b) {
    return a.second < b.second;
}

int solution(vector<vector<int>> jobs) {
    priority_queue<int, vector<int>, greater<int>> pq;
    vector<pair<int, int>> tmp;
    int answer = 0, time = 0, i = 1, j = 0, size = jobs.size();
    while(j < size) {
        if(time == 0) {
            time = jobs[0][1] - jobs[0][0];
            answer += time;
        }
        else {
            for(;jobs[i][0] <= time; i++) {
                tmp.push_back({jobs[i][0], jobs[i][1]});
            }
            sort(tmp.begin(), tmp.end(), compare);
            time += tmp.front().second - 1;
            answer += time - tmp.front().first;
            tmp.erase(tmp.begin());
        }
        j++;
    }
    return answer/size;
}
  • 2번째 while문에서 core dumped 발생

0개의 댓글