PS

BOJ 29155 : 개발자 지망생 구름이의 취업 뽀개기

lickelon 2024. 2. 17. 16:18
  • 문제 링크 : boj.kr/29155
  • 난이도 : S3
  • 태그 : 정렬, 그리디
 

29155번: 개발자 지망생 구름이의 취업 뽀개기

난이도 $1$에서 $1$분, $4$분, $4$분 순서로, 난이도 $2$에서 $5$분, 난이도 $3$에서 $20$분, 난이도 $4$에서 $40$분, 난이도 $5$에서 $100$분 순서대로 풀면 $1+3+4+0+4+60+5+60+20+60+40+60+100=417$분이 걸린다.

www.acmicpc.net


코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int n;
    cin >> n;
    int goal[5] = {};
    for(int i = 0; i < 5; i++) {
        cin >> goal[i];
    }
    vector<int> p[5];
    for(int i = 0; i < n; i++) {
        int a, b;
        cin >> a >> b;
        p[a-1].emplace_back(b);
    }
    int ans = 240;
    for(int i = 0; i < 5; i++) {
        sort(all(p[i]));
        for(int j = 1; j < goal[i]; j++) {
            ans += p[i][j];
        }
        ans += p[i][goal[i]-1];
    }
    cout << ans;

    return 0;
}

풀이

모든 난이도의 문제를 풀어야 하므로 기본적으로 240분이 걸린다.

한 난이도 내에서 문제를 푸는 데에 걸리는 시간을 구해보자.

같은 난이도에서 문제를 풀 때는 이전의 문제와 푸는 시간의 차이만큼 쉬어야 한다.

어떤 두 문제를 푼다고 했을 때, 두 문제를 푸는 총 시간은 결국 둘 중 오래 걸리는 시간 * 2 만큼 걸린다.

이를 최소화하기 위해 시간이 적게 걸리는 문제부터 풀어가며 계산하면 해결할 수 있다.

 

728x90