๐Ÿ’ป

[๋ฐฑ์ค€] ๊ทธ๋ฆฌ๋”” - 1202. ๋ณด์„๋„๋‘‘ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฌธ์ œํ’€์ด Baekjoon

[๋ฐฑ์ค€] ๊ทธ๋ฆฌ๋”” - 1202. ๋ณด์„๋„๋‘‘

๋˜ํšจ๋‹ˆ 2020. 2. 13. 03:09

๋ฌธ์ œ

์„ธ๊ณ„์ ์ธ ๋„๋‘‘ ์ƒ๋•์ด๋Š” ๋ณด์„์ ์„ ํ„ธ๊ธฐ๋กœ ๊ฒฐ์‹ฌํ–ˆ๋‹ค.

์ƒ๋•์ด๊ฐ€ ํ„ธ ๋ณด์„์ ์—๋Š” ๋ณด์„์ด ์ด N๊ฐœ ์žˆ๋‹ค. ๊ฐ ๋ณด์„์€ ๋ฌด๊ฒŒ Mi์™€ ๊ฐ€๊ฒฉ Vi๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ƒ๋•์ด๋Š” ๊ฐ€๋ฐฉ์„ K๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๊ฐ ๊ฐ€๋ฐฉ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฌด๊ฒŒ๋Š” Ci์ด๋‹ค. ๊ฐ€๋ฐฉ์—๋Š” ์ตœ๋Œ€ ํ•œ ๊ฐœ์˜ ๋ณด์„๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

์ƒ๋•์ด๊ฐ€ ํ›”์น  ์ˆ˜ ์žˆ๋Š” ๋ณด์„์˜ ์ตœ๋Œ€ ๊ฐ€๊ฒฉ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N, K ≤ 300,000)

๋‹ค์Œ N๊ฐœ ์ค„์—๋Š” ๊ฐ ๋ณด์„์˜ ์ •๋ณด Mi์™€ Vi๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (0 ≤ Mi, Vi ≤ 1,000,000)

๋‹ค์Œ K๊ฐœ ์ค„์—๋Š” ๊ฐ€๋ฐฉ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฌด๊ฒŒ Ci๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Ci ≤ 100,000,000)

๋ชจ๋“  ์ˆซ์ž๋Š” ์–‘์˜ ์ •์ˆ˜์ด๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ƒ๋•์ด๊ฐ€ ํ›”์น  ์ˆ˜ ์žˆ๋Š” ๋ณด์„ ๊ฐ€๊ฒฉ์˜ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ1

3 2
1 65
5 23
2 99
10
2

 

์˜ˆ์ œ ์ถœ๋ ฅ1

164

 

์ƒ๊ฐ

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๊ณ  ๋‚˜์„œ ํ‘ธ๋Š” ๊ฑด๋ฐ๋„ ์ƒ๊ฐ์„ ๊ตฌํ˜„์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ด ์‰ฝ์ง€๊ฐ€ ์•Š์Œ์„ ๋Š๊ผˆ๋‹ค. ์ž…๋ ฅ ๋ฐ›๋Š” ๊ฑฐ๋Š” ๋ฌด๋ฆฌ์—†์ด ๋ฐ›์•˜์ง€๋งŒ ๊ฐ€๋ฐฉ์˜ ๋ฌด๊ฒŒ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ์ฃผ์–ด์ง„๋‹ค๋Š” ์ ์ด ๊นŒ๋‹ค๋กœ์› ๋‹ค. ์กฐ๊ฑด์ด ๋งŽ๋‹ค๋ณด๋‹ˆ ์–ด๋–ป๊ฒŒ ํ’€์–ด๋‚˜๊ฐ€์•ผํ• ์ง€ ๊ฐ์„ ์žก๊ธฐ๊ฐ€ ํž˜๋“ค์–ด์„œ ๋‹ค๋ฅธ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ ๋‚˜์„œ ๋ด์„œ ๊ทธ๋Ÿฐ์ง€ ์ด์ „๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ๋Š๊ปด์กŒ๋‹ค. ๋ฐ˜๋ณต์ ์ธ ํ’€์ด๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ๊ฐ™๋‹ค. ์™„์ „ํžˆ ์ดํ•ด๊ฐ€ ๋˜๋ฉด ์ถ”ํ›„์— ์ •๋ฆฌํ•  ์˜ˆ์ •

 

์ž‘์„ฑํ•œ ์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;
int W[300001];

int main(int argc, const char * argv[]) {
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    vector<pair<int, int> > v;
    
    int n, k; //n:๋ณด์„ ๊ฐœ์ˆ˜, k:๊ฐ€๋ฐฉ ๊ฐœ์ˆ˜
    cin >> n >> k;
    
    for(int i=0; i<n; i++) {
        int w, p; // w:๋ณด์„ ๋ฌด๊ฒŒ, p:๋ณด์„ ๊ฐ€๊ฒฉ
        cin >> w >> p;
        v.push_back(make_pair(w,p));
    }
    
    for(int i=0; i<k; i++){
        cin >> W[i]; //๊ฐ€๋ฐฉ์˜ ๋ฌด๊ฒŒ
    }
    
    sort(v.begin(), v.end());
    sort(W, W+k);
    
    priority_queue<int> pq;
    
    int j=0;
    long long int sum=0;
    
    // ๋ฌด๊ฒŒ๊ฐ€ ๋‚ฎ์€ ๊ฐ€๋ฐฉ๋ถ€ํ„ฐ
    for(int i=0; i< k; i++){
        while(j<n && v[j].first <= W[i]){ //๋ณด์„๋ฌด๊ฒŒ๊ฐ€ ๊ฐ€๋ฐฉ๋ฌด๊ฒŒ๋ณด๋‹ค ์ž‘์•„์•ผํ•œ๋‹ค๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด
            pq.push(v[j].second); // ๋ณด์„ ๊ฐ€๊ฒฉ ๋„ฃ์–ด์ค€๋‹ค
            j++;
        }
        if(!pq.empty()){
            sum += pq.top();
            pq.pop();
        }
    }
    
    cout << sum << "\n";
    return 0;
}

๋ฐ˜์‘ํ˜•
Comments