안녕하세요. 오늘은 퇴근을 할 거예요.

문제

https://www.acmicpc.net/problem/30088

아이디어

한 부서씩 차례대로 클리어하는게 좋습니다.
이때 그 부서 전체가 가장 빨리 끝나는, 즉 값의 합이 가장 작은 부서부터 해야합니다.
그러므로 각 직원의 면담시간의 합을 기준으로 정렬을 하고 A1+(A1+A2)+(A1+A2+A3)+...+(A1+...+An)의 값을 출력해주면 됩니다.

소스코드

#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;

int main(void)
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    ll N, M, sum[1010] = { 0 }, i, j, sum2 = 0, ans = 0, x;

    cin >> N;
    for (i = 1; i <= N; i++)
    {
        cin >> M;
        for (j = 0; j < M; j++)
        {
            cin >> x;
            sum[i] += x;
        }
    }
    sort(sum + 1, sum + 1 + N);

    for (i = 1; i <= N; i++)
    {
        sum2 += sum[i];
        ans += sum2;
    }

    cout << ans;
}


감사합니다.

0개의 댓글