while (1): study();

[알고스팟] 도시락 데우기 본문

알고리즘

[알고스팟] 도시락 데우기

전국민실업화 2022. 1. 2. 23:34
728x90

링크: https://algospot.com/judge/problem/read/LUNCHBOX

 

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

algospot.com


<파이썬3 소스코드>

import sys
rl = lambda: sys.stdin.readline()

def min_time():
    time = [(_m, _e) for _m, _e in zip(m, e)]
    time.sort(key=lambda x: x[1], reverse=True)
    heat, eat = 0, 0
    for current_m, current_e in time:
        heat += current_m
        eat = max(eat - current_m, current_e)
    return heat + eat
    
for _ in range(int(rl())):
    N = int(rl())
    m = list(map(int, rl().split()))
    e = list(map(int, rl().split()))
    print(min_time())

 

<C++ 소스코드>

#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;

int minTime(const vector<int> m, const vector<int> e)
{
	int heat = 0, eat = 0;
	vector<pair<int, int>> time;
	for (int i = 0; i < m.size(); i++)
		time.push_back(make_pair(-e[i], m[i]));
	sort(time.begin(), time.end());
	for (int i = 0; i < m.size(); i++)
	{
		heat += time[i].second;
		eat = max<int>(eat - time[i].second, -time[i].first);
	}
	return heat + eat;
}

vector<int>& getInput(vector<int>& vec, const int length)
{
	for (int n = 0; n < length; n++)
	{
		int elem;
		scanf("%d", &elem);
		vec.push_back(elem);
	}
	return vec;
}

int main(void)
{
	int T;
	scanf("%d", &T);
	for (int t = 0; t < T; t++)
	{
		int N;
		scanf("%d", &N);
		vector<int> m, e;
		m = getInput(m, N);
		e = getInput(e, N);	
		int result = minTime(m, e);
		printf("%d\n", result);
	}
	return 0;
}
728x90
Comments