[ 문제 ] : https://programmers.co.kr/learn/courses/30/lessons/42627
코딩테스트 연습 - 디스크 컨트롤러
하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를
programmers.co.kr
[ 문제 접근 ]
우선 순위큐를 사용하여 작업의 소요시간이 작은 순으로 하나씩 뽑아내면 되겠다고 생각이 듬.
큐에 값을 하나씩 빼면서 시간을 계산해주고, 시간안에 들어온 작업들을 다시 큐에 넣어주면서 정답을 계산한다.
[ 최종 코드 ]
#include <string> #include <vector> #include <queue> #include<algorithm> using namespace std; struct cmp { bool operator()(std::pair<int, int> a, std::pair<int, int> b) { return a.second > b.second; } }; int solution(vector<vector<int>> jobs) { int answer = 0; int size = jobs.size(); std::priority_queue<std::pair<int, int>, vector<std::pair<int, int>>, cmp> pq; int time = 0, delay = 0; int cnt = 0; std::sort(jobs.begin(),jobs.end()); for (int i = 0; i < size;i++) { // 모든 작업이 실행될때까지 while (cnt < size && jobs[cnt][0] <= time) { pq.push({ jobs[cnt][0], jobs[cnt][1] }); cnt++; } if (pq.empty()) { // pq에 들어가지 못했을때 time = jobs[cnt][0]; // time을 옮겨 들어가게끔. i--; continue; } delay = time - pq.top().first; answer += (delay + pq.top().second); time += pq.top().second; pq.pop(); } return answer / size; }
[ Key Point ]
👉 한 작업이 끝나고 다음 작업 요청이 와 있지 않거나, 바로 오지 않는 case도 생각해줘야한다.
[ 다른 사람 풀이 ]
'PS > Programmers' 카테고리의 다른 글
[가장 큰 수] - 정렬 ★★☆☆ / 복습 ○ (0) | 2021.12.22 |
---|---|
[이중우선순위큐] - 우선순위큐 ★★★☆ / 복습 ○ (0) | 2021.12.22 |
[더 맵게] - 힙(heap) ★★☆☆ / 복습 ○ (0) | 2021.12.20 |
[기능개발] - 스택/큐 ★☆☆☆ / 복습 ○ (0) | 2021.12.20 |
[전화번호 목록] - 해쉬 ★★★☆ / 복습 ○ (0) | 2021.12.14 |