본문 바로가기

백준

백준2109 - 순회강연

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

 

2109번: 순회강연

문제 한 저명한 학자에게 n(0≤n≤10,000)개의 대학에서 강연 요청을 해 왔다. 각 대학에서는 d(1≤d≤10,000)일 안에 와서 강연을 해 주면 p(1≤p≤10,000)만큼의 강연료를 지불하겠다고 알려왔다. 각 대

www.acmicpc.net

그리디 알고리즘으로 풀었다. 비용이 큰 순서가 앞에 오고 작은 순서가 뒤로 오도록 정렬한 뒤 적어도 x일에는 끝내야 하니까 x일에서 출발하여 1일까지 하루씩 줄여 나가면서 방문하지 않은 일수를 만나면 그 지점을 방문처리하고 비용을 더해주는 식으로 풀었다.

#include <iostream>
#include <vector>
#include <algorithm>    
#define MAX 10001
using namespace std;

bool mat[MAX] = { false, };
vector<pair<int, int>> v;
int n, x, y, cnt = 0;

bool compare(pair<int, int> a, pair<int, int> b) {
    return a.first >= b.first;
}

int main() {
    cin >> n;
    for(int i = 0; i < n; i++) {
        cin >> x >> y;
        v.push_back(pair<int, int>(x, y));
    }
    
    sort(v.begin(), v.end(), compare);
    
    for(int i = 0; i < v.size(); i++) {
        for(int j = v[i].second; j >= 1; j--) {
            if(mat[j] == false) {
                mat[j] = true;
                cnt += v[i].first;
                break;
            }
        }
    }
    
    cout << cnt;
    
    return 0;
}

'백준' 카테고리의 다른 글

백준1388 - 바닥 장식  (0) 2020.08.03
백준2479 - 경로 찾기  (0) 2020.07.16
백준1062 - 가르침  (0) 2020.07.06
백준1089 - 엘리베이터  (0) 2020.06.14
백준18115 - 카드 놓기  (0) 2020.06.12