알고리즘/algospot

algospot LUNCHBOX

꾸준함. 2018. 2. 15. 16:31

문제 링크입니다: https://algospot.com/judge/problem/read/LUNCHBOX

데우는 시간은 상관이 없고 먹는 시간이 식사시간을 좌지우지한다는 것이 핵심이였습니다.


/*

유명한 도시락 업체에서 n개의 도시락을 주문했다.

주문량이 많아서 한가지 도시락만 주문할 수는 없었기 때문에 여러가지 종류의 도시락을 주문했다.

하지만 전자레인지는 하나뿐이고 출력량도 적어 한번에 한 도시락만 데울 수 있다.

이 때, 식사시간을 최소화 하려면 어떻게 해야할까?

*/

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

 

const int MAX = 10000; //boxNum<=10000

int boxNum;

int heating[MAX], eating[MAX];

 

int microwave(void)

{

        //어느 순서로 데워야할지를 정한다

        vector<pair<int, int>> order;

        for (int i = 0; i < boxNum; i++)

               order.push_back(make_pair(-eating[i], i));

        //도시락 먹는데 걸리는 시간 역순

        //, 오래 먹는 순서부터

        sort(order.begin(), order.end());

        //해당 순서대로 데워먹는 과정을 시뮬레이션

        int result = 0, beginEat = 0; //결과, 먹기 시작한 시간

        for (int i = 0; i < boxNum; i++)

        {

               int box = order[i].second;

               beginEat += heating[box];

               result = max(result, beginEat + eating[box]);

        }

        return result;

}

 

int main(void)

{

        int test_case;

        cin >> test_case;

        if (test_case < 1 || test_case>300)

               exit(-1);

       

        for (int i = 0; i < test_case; i++)

        {

               cin >> boxNum;

               //데우는데 걸리는 시간

               for (int j = 0; j < boxNum; j++)

                       cin >> heating[j];

               //먹는데 걸리는 시간

               for (int j = 0; j < boxNum; j++)

                       cin >> eating[j];

               cout << microwave() << endl;

        }

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~


[참고] 프로그래밍 대회에서 배우는 알고리즘 문제해결전략

반응형

'알고리즘 > algospot' 카테고리의 다른 글

algospot MINASTIRITH  (0) 2018.02.15
algospot STRJOIN  (0) 2018.02.15
c++ 회의실 배정 알고리즘(DP 사용)  (2) 2018.02.13
algospot MATCHORDER  (0) 2018.02.13
algospot GENIUS  (0) 2018.02.12