Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 삼성 #코테 #2020상반기 #c++
- 스마일게이트
- BaekJoon
- 카카오인턴
- 소감
- Algorithm
- 1편
- BFS
- 코테
- 유니온파인드
- 코딩테스트
- Union-find
- 알고리즘
- 카카오
- c++
- 보석쇼핑
- 백준
- 식단
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- Smilegate
- 서버개발캠프
- 중반부
- LIS #Algorithm #요소추적
- 투포인터
Archives
- Today
- Total
짱아의 개발 기록장
프로그래머스. 디스크컨트롤러(c++) / 힙(Heap) 본문
반응형
[메인로직]
현재 시간(sec)이하의 요청 시간을 가지고 있는 작업들을 모두 최소 힙에 넣고 => 힙에 pair<작업시간, 요청시간> 형태로 저장했다.
그 중 가장 작은 작업 시간을 가지는 작업을 수행한다.
위의 로직을 모든 작업이 끝날때까지 반복하면 된다!
하지만!!!!! [[0 , 3], [4, 4], [5, 3], [4, 1]] 이 테스트케이스에서 오류가 발생했다.....
작업을 수행하면서 현재 시간을 sec += (작업의 소요시간) 으로 더해주었는데,,,,,,
위 케이스에서는 첫 번째 작업 수행 후, sec = 3이 되면 3이하의 요청시간을 가지는 작업이 하~~~나도 없기 때문에 의미없이 while문을 계속돌아서 TimeLimit이 발생한다.
따라서, 위와 같이 priority_queue에 아무것도 없을 경우에는 현재시간 sec를 다음 요청시간인 sec = 4로 갱신시켜주어야 한다!
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #include <string> #include <vector> #include <queue> #include <algorithm> using namespace std; bool check[501]; int N = 0; bool isAllDone(){ for(int i=0; i<N; i++){ if(check[i]==false){ return false; } } return true; } int solution(vector<vector<int>> jobs) { int answer = 0; sort(jobs.begin(), jobs.end()); int currentTime = jobs[0][0]+jobs[0][1]; answer += jobs[0][1]; check[0] = true; int currentIdx = 0; N = jobs.size(); while(!isAllDone()){ priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; for(int i=0; i<N; i++){ if(check[i]==true) continue; if(currentTime>=jobs[i][0]){ pq.push(make_pair(jobs[i][1], jobs[i][0])); } } if(pq.empty()){ currentTime = jobs[currentIdx+1][0]; continue; } int requestTime = pq.top().second; int runningTime = pq.top().first; pq.pop(); answer += (currentTime+runningTime-requestTime); currentTime += runningTime; for(int i=0; i<N; i++){ if(jobs[i][0]==requestTime && jobs[i][1]==runningTime){ check[i] = true; currentIdx = i; } } } answer /= jobs.size(); return answer; } | cs |
반응형
'Algorithm > Programmers' 카테고리의 다른 글
프로그래머스. 입국심사(c++) / 이분탐색 (0) | 2021.01.09 |
---|---|
프로그래머스. 네트워크(c++) / BFS (0) | 2021.01.08 |
프로그래머스. 카펫(c++) / 완탐(Brute Force) (0) | 2021.01.08 |
프로그래머스. 단속카메라(c++) / 그리디(Greedy) (0) | 2021.01.08 |
프로그래머스. 다리를 지나는 트럭(c++) / 큐(queue) (0) | 2021.01.07 |
Comments