문제링크 입니다 결론은 모든 도시락을 먹는데 걸리는 시간 C와 모든 도시락을 데우는데 걸리는 시간의 합이라는 것을 알 수 있습니다.

[LUNCHBOX] 문제 😊😊😊😊😊

본문이 영어로 되어 있네요.. 한글로 간단하게 설명드리겠습니다. 유명한 도시락 업체에서 n개의 도시락을 주문했는데, 주문량이 많아서 한가지 도시락만 주문할 수 없었기 때문에 여러가지 종류의 도시락을 주문했다.
하지만 전자레인지는 하나뿐이고 출력량도 적어 한번에 한 도시락만 데울 수 있다.
이 때, 식사시간을 최소화 하라면 어떻게 해야할까?

입력

입력의 첫 줄에는 테스트 케이스의 수 C (C≤300)가 주어집니다.\ 각 테스트 케이스는 세줄로 구성되며, 첫줄에는 도시락의 수 n, 둘째 줄에는 n개의 정수로 각 도시락을 데우는데 걸리는 시간이 주어지며, 세 번째 줄에는 역시 n개의 정수로 각 도시락을 먹는데 걸리는 시간이 주어집니다.

출력

점심을 먹는데 걸리는 최소 시간을 출력.

입력 예제

2
3
2 2 2
2 2 2
3
1 2 3
1 2 1

출력 예제

8
7

전체 코드는 다음과 같습니다.

//
//  LUNCHBOX.cpp
//  AALGGO
//
//  Created by inhyeok on 2021/10/18.
//


#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <utility>
using namespace std;

int N;
const int MAX_N = 10000;
int e[MAX_N+1];
int m[MAX_N+1];

ifstream fin("LUNCHBOX.txt");
int lunchbox(){
    int total_E=0, result=0;
    vector<pair<int, int>> vec;
    for(int i=0; i<N; i++){
        vec.push_back(make_pair(-e[i],i));
    }
    sort(vec.begin(), vec.end());
    for(int i=0; i<N; i++){
        int box = vec[i].second;
        total_E += m[box];
        result = max(result, total_E + e[box]);
    }

    return result;
}

int main(int argc, const char * argv[]) {
    int test_case;
    fin >> test_case;

    for(int Test = 0; Test < test_case; Test++){
        fin>>N;
        vector<int> korea;
        vector<int> russia;
        for(int i=0; i<N; i++){
            fin >> m[i];
        }
        for(int i = 0; i<N; i++){
            fin >> e[i];
        }

        cout << lunchbox() << endl;
    }
    return 0;
}


LUNCHBOX

Comments