반응형
문제 설명
algospot.com :: LUNCHBOX
Microwaving Lunch Boxes 문제 정보 문제 After suffering from the deficit in summer camp, Ainu7 decided to supply lunch boxes instead of eating outside for Algospot.com winter camp. He contacted the famous packed lunch company "Doosot" to prepare N lun
www.algospot.com
- n개의 도시락이 있다.(1 <= n <= 10000)
- 도시락을 데우는데 쓰는 전자레인지는 1개 뿐이다.
- 도시락을 데우는 데는 m초, 먹는데는 e초가 걸린다.
- 도시락을 먹는 시간 : 첫 번째 도시락을 데우기 시작하는 순간 ~ 마지막 사람이 도시락을 다 먹을 때까지 걸리는 시간.
=> 도시락을 먹는데 걸리는 최소 시간을 출력하기
문제 풀이
도시락을 먹는 시간을 단축하기 위해서는
도시락을 먹는 시간은 데우는 시간 m, 먹는 시간 e로 이루어진다.
도시락은 한 번에 하나만 데울 수 있다. 모든 도시락을 데우고 다 먹어야 하므로 최소 sum(m)시간은 걸릴 것이다.
그렇다면, 도시락을 전부 데운 후(sum(m))에 먹기만 하는 시간을 최소화할 수 있는 방법으로 순서를 정해야 전체 시간을 단축시킬 수 있다.
이는 곧 마지막에 남는 e가 작아야 하므로, e가 큰 것부터 먼저 먹기 시작하는 것이 전체 시간을 최소화하는 방법이다.
문제 풀이 코드
#include <iostream>
using namespace std;
#define MAXVALUE 10000
#define MAX(a, b) (a > b ? a : b)
int lunchBox[MAXVALUE][2];
int sortedIndex[MAXVALUE];
int temp[MAXVALUE];
void mergeSort(int startIdx, int endIdx, int mid) {
int i = startIdx;
int j = mid + 1;
int l = startIdx;
while (i <= mid && j <= endIdx) {
// e가 큰 것부터 앞에 배치
if (lunchBox[sortedIndex[i]][1] > lunchBox[sortedIndex[j]][1])
temp[l++] = sortedIndex[i++];
else
temp[l++] = sortedIndex[j++];
}
while (i <= mid)
temp[l++] = sortedIndex[i++];
while (j <= endIdx)
temp[l++] = sortedIndex[j++];
for (int l = startIdx; l <= endIdx; ++l)
sortedIndex[l] = temp[l];
}
void sort(int startIdx, int endIdx) { // 정렬
if (startIdx >= endIdx) return;
int mid = (startIdx + endIdx) / 2;
sort(startIdx, mid);
sort(mid + 1, endIdx);
mergeSort(startIdx, endIdx, mid);
}
int main() {
int C;
cin >> C;
for (int tc = 1; tc <= C; ++tc) {
int n;
cin >> n;
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < n; ++j) {
cin >> lunchBox[j][i];
}
}
for (int j = 0; j < n; ++j) {
sortedIndex[j] = j;
}
sort(0, n - 1);
int chingTime = 0; // 데우기 시작한 시간
int endTime = 0; // 다 먹은 시간
for (int i = 0; i < n; ++i) {
chingTime += lunchBox[sortedIndex[i]][0];
endTime = MAX(endTime, chingTime + lunchBox[sortedIndex[i]][1]);
}
cout << endTime << endl;
}
return 0;
}
반응형
'알고리즘 문제풀이 > 알고리즘 문제해결전략' 카테고리의 다른 글
9.2_여행 짐 싸기_PACKING (0) | 2023.02.22 |
---|---|
10.4_문자열 합치기_STRJOIN (0) | 2023.02.19 |
8.16_두니발 박사의 탈옥_NUMB3RS (0) | 2023.02.15 |
8.14_폴리오미노_POLY (0) | 2023.02.15 |
8.11_비대칭 타일링_ASYMTILING (0) | 2023.02.14 |