[알고리즘/C++] 작업 완료 최소 시간 구하기
2023. 7. 18. 22:18ㆍAlgorithm
한 Task를 처리하는데 각각 처리 시간이 다른 기계들이 있다.
완료되어야 하는 작업의 수는 compNum개이고,
각 기계들은 상이한 작업 처리 시간을 가지고 있다.
compNum개의 작업이 모두 완료되기 위한 최소 시간은 얼마인가?
이진 탐색(binary search)를 통해서 구해보자.
int minTaskTime(int taskNum, vi prcTime) {
//taskNum: 해결해야하는 작업의 개수
//prcTime: 작업하는 기계들의 처리시간을 갖는 벡터
int low = 0;
int high = 10000;
int mid = 0;
while (1) {
int compNum = 0;
mid = (low + high) / 2;
for (int i = 0; i < prcTime.size(); i++) {
compNum += floor(mid/prcTime[i]);
}
if (compNum == taskNum) {
//mid 시간 동안 최대 완료할 수 있는 작업의 개수가
//실제 달성해야하는 작업의 개수와 같다면 최적 해이다.
return mid;
}
if (compNum > taskNum) {
//완료 가능 작업 개수가 필요량보다 over하면
//시간을 줄인다.
high = mid;
}
else {
low = mid;
}
}
}
int main() {
vi arr = {135, 223, 311, 383};
cout << minTaskTime(15, arr);
}
'Algorithm' 카테고리의 다른 글
[알고리즘/C++] 최소 지폐 개수 구하기(동적 프로그래밍) (0) | 2023.07.21 |
---|---|
[알고리즘/C++] 병합 정렬(merge sort) (0) | 2023.07.18 |
[알고리즘/C++] 부분 최대합 구하기 (0) | 2023.07.12 |
[Algorithm] 체스 퀸 배치 구하기 (0) | 2023.03.12 |
[Algorithm] 순열 구하기 (1) | 2023.03.12 |