[문제 위치]
https://www.acmicpc.net/problem/30088
[문제 풀이]
이 문제는 그리디(정렬+누적합) 를 통해 해결하는 문제이다.
부서 i의 직원 면담 시간 합을 t_i라 두면 한 부서의 퇴근 시각은 그 부서를 끝낼 때의 누적 시간이 되고 전체 합은 처리 순서에 따른 누적합들의 합이므로 누적합의 합을 최소화하려면 t_i가 작은 부서부터 처리하면 되므로 부서별 합을 구해 오름차순 정렬한 뒤 누적합을 더해 답을 구하게 해결한다
아래는 이를 구현한 코드이다.
#include <bits/stdc++.h>
using namespace std;
#define FASTIO ios::sync_with_stdio(false); cin.tie(nullptr);
int main() {
FASTIO;
int N;
if (!(cin >> N)) return 0;
vector<long long> sumDept(N);
for (int i = 0; i < N; ++i) {
int m; cin >> m;
long long s = 0;
for (int j = 0; j < m; ++j) {
int t; cin >> t;
s += t;
}
sumDept[i] = s;
}
sort(sumDept.begin(), sumDept.end());
long long ans = 0, pref = 0;
for (long long x : sumDept) {
pref += x; // 현재까지 누적 시간
ans += pref; // 이 시점에 끝난 부서의 퇴근 시각 합에 더함
}
cout << ans << '\n';
return 0;
}'문제 풀이 > 문제 풀이(BOJ)' 카테고리의 다른 글
| [Silver V] Q-인덱스 - 13333 (0) | 2025.12.08 |
|---|---|
| [Silver V] 제리와 톰 2 - 17504 (0) | 2025.11.18 |
| [Silver V] 포켓몬 GO - 13717 (0) | 2025.11.12 |
| [Silver V] 팔찌 만들기 - 25707 (0) | 2025.11.12 |
| [Silver V] 모바일 광고 입찰 - 31246 (0) | 2025.11.08 |