๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90
๐Ÿ”—๋ฌธ์ œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ
 

13904๋ฒˆ: ๊ณผ์ œ

์˜ˆ์ œ์—์„œ ๋‹ค์„ฏ ๋ฒˆ์งธ, ๋„ค ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ์ฒซ ๋ฒˆ์งธ, ์ผ๊ณฑ ๋ฒˆ์งธ ๊ณผ์ œ ์ˆœ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ , ์„ธ ๋ฒˆ์งธ, ์—ฌ์„ฏ ๋ฒˆ์งธ ๊ณผ์ œ๋ฅผ ํฌ๊ธฐํ•˜๋ฉด 185์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

www.acmicpc.net

 

๐Ÿ‘จ‍๐Ÿ’ปํ’€์ด ๊ณผ์ •

 

  1. ๊ณผ์ œ ๋งˆ๊ฐ์ผ์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•˜๋˜, ๋งˆ๊ฐ์ผ์ด ๊ฐ™๋‹ค๋ฉด ์ ์ˆ˜๊ฐ€ ๋†’์€ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์ค๋‹ˆ๋‹ค.
  2. ๊ฒฝ๊ณผ๋œ ๋‚ ์งœ ๋ณ€์ˆ˜๋ฅผ 0์œผ๋กœ ์„ธํŒ…ํ•˜๊ณ , ์ฃผ์–ด์ง„ ๊ณผ์ œ๋“ค์„ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ธฐ๊ฐ„ ๋‚ด์— ๊ฐ€๋Šฅํ•œ ์ˆ™์ œ๋ผ๋ฉด, ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.  (๊ฒฝ๊ณผ๋œ ๋‚ ์งœ ๋ณ€์ˆ˜ + 1)
  4. ๋งˆ๊ฐ์ผ์ด ์ง€๋‚ฌ๊ณ  ์ด๋ฏธ ์™„๋ฃŒํ•œ ๊ณผ์ œ๋“ค ์ค‘์— ๊ฐ€์žฅ ๋‚ฎ์€ ์ ์ˆ˜๋ณด๋‹ค ์ ์ˆ˜๋ฅผ ์ ๊ฒŒ ์ค€๋‹ค๋ฉด, ๋‹ค์Œ ๊ณผ์ œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฏธ ์™„๋ฃŒํ•œ ๊ณผ์ œ๋“ค์ด ํ•ญ์ƒ ์ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์ด ๋˜์–ด ์žˆ๋„๋ก, ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ๋งˆ์ง€๋ง‰ ๊ณผ์ œ๊นŒ์ง€ ํ™•์ธ์„ ํ–ˆ๋Š”๋ฐ๋„ ์ด ์กฐ๊ฑด์„ ๋ฒ—์–ด๋‚˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด, ์™„๋ฃŒํ•œ ๊ณผ์ œ๋“ค์˜ ์ ์ˆ˜๋ฅผ ํ•ฉ์‚ฐํ•˜๊ณ  ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ์กฐ๊ฑด์„ ๋ฒ—์–ด๋‚˜๋Š” ๊ณผ์ œ๋ฅผ ์ฐพ์•˜๋‹ค๋ฉด, ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
      • ์ฐพ์•„๋‚ธ ๊ณผ์ œ๊ฐ€ 5๋ฒˆ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ณผ์ œ๋ผ๋Š” ๋œป์ด๋ฏ€๋กœ ํ•ด๋‹น ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. (๊ฒฝ๊ณผ๋œ ๋‚ ์งœ ๋ณ€์ˆ˜ + 1)
  5. ๋งˆ๊ฐ์ผ์ด ์ง€๋‚œ ์ˆ™์ œ์ด๋ฉฐ, ์ด๋ฏธ ์™„๋ฃŒํ•œ ๊ณผ์ œ๋“ค ์ค‘์— ๊ฐ€์žฅ ๋‚ฎ์€ ์ ์ˆ˜๋ณด๋‹ค ์ ์ˆ˜๋ฅผ ๋งŽ์ด ์ค€๋‹ค๋ฉด, ์ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ์™„๋ฃŒํ•œ ๊ณผ์ œ๋ฅผ ๋นผ๊ณ  ํ•ด๋‹น ๊ณผ์ œ๋ฅผ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ๋•Œ๋Š” ์ด์ „์— ํ–ˆ๋˜ ๊ณผ์ œ ๋Œ€์‹  ํ˜„์žฌ ๊ณผ์ œ๋ฅผ ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ, ๊ฒฝ๊ณผ๋œ ๋‚ ์งœ ๋ณ€์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  6. ๋ชจ๋“  ๊ณผ์ œ๋ฅผ ๋‹ค ํƒ์ƒ‰ํ–ˆ๋‹ค๋ฉด, ์™„๋ฃŒํ•œ ๊ณผ์ œ๋“ค์˜ ์ ์ˆ˜๋ฅผ ํ•ฉ์‚ฐํ•˜์—ฌ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

โœ๏ธ์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๊ฒฐ๊ณผ

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

using namespace std;
using Assignment = pair<int, int>;  // <๋‚จ์€ ์ผ ์ˆ˜, ์ ์ˆ˜>
#define FAST_IO ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);

int main()
{
    // 1. ์ž…๋ ฅ ๋ฐ›๊ธฐ
    FAST_IO
    int N, remainedDay, point;
    cin >> N;
    
    vector<Assignment> assignments(N);
    for (int i = 0; i < N; i++)
    {
        cin >> remainedDay >> point;
        assignments[i] = make_pair(remainedDay, point);
    }

    // 2. ๋‚จ์€ ๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚จ์€ ๋‚ ์งœ๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์ ์ˆ˜๊ฐ€ ๋†’์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ
    sort(assignments.begin(), assignments.end(), [](const Assignment& a1, const Assignment& a2) {
        if (a1.first == a2.first)
            return a1.second > a2.second;
        return a1.first < a2.first;
    });

    // 3. ์ˆ™์ œ ์„ ์ •ํ•˜๊ธฐ
    priority_queue<int, vector<int>, greater<int>> completedAssignments;
    int elapsedDay = 0, index = 0;

    while (index < N)
    {
        remainedDay = assignments[index].first;
        point = assignments[index].second;

        // 1) ๊ธฐ๊ฐ„ ๋‚ด์— ๊ฐ€๋Šฅํ•œ ์ˆ™์ œ๋ผ๋ฉด, ์ผ๋‹จ ํด๋ฆฌ์–ด
        if (completedAssignments.empty() or elapsedDay < remainedDay)
        {
            completedAssignments.push(point);
            elapsedDay++;
            index++;
            continue;
        }
        
        // 2) ๊ธฐ๊ฐ„์ด ์ง€๋‚œ ์ˆ™์ œ๊ฐ€ ํด๋ฆฌ์–ด ํ–ˆ๋˜ ์ˆ™์ œ๋“ค ์ค‘์— ๊ฐ€์žฅ ๋‚ฎ์€ ์ ์ˆ˜๋ณด๋‹ค ์ ์ˆ˜๊ฐ€ ๋‚ฎ๋‹ค๋ฉด, ๋‹ค์Œ ์ˆ™์ œ๋ฅผ ํ™•์ธ
        while (index < N and remainedDay <= elapsedDay and point <= completedAssignments.top())
        {
            index++;
            remainedDay = assignments[index].first;
            point = assignments[index].second;
        }

        if (index >= N)
            break;

        // 3) ๊ธฐ๊ฐ„์ด ์ง€๋‚œ ์ˆ™์ œ๊ฐ€ ํด๋ฆฌ์–ด ํ–ˆ๋˜ ์ˆ™์ œ๋“ค ์ค‘์— ๊ฐ€์žฅ ๋‚ฎ์€ ์ ์ˆ˜๋ณด๋‹ค ์ ์ˆ˜๊ฐ€ ๋†’๋‹ค๋ฉด, ํด๋ฆฌ์–ด ํ•œ ์ˆ™์ œ๋Š” ๋ฒ„๋ฆฌ๊ณ  ํ•ด๋‹น ์ˆ™์ œ๋ฅผ ํด๋ฆฌ์–ด
        if (remainedDay <= elapsedDay and completedAssignments.top() < point)
        {
            completedAssignments.pop();
            completedAssignments.push(point);
            index++;
            continue;
        }

        // 4) 2)๋ฒˆ์—์„œ ์ฐพ์€ ๋‹ค์Œ ๊ณผ์ œ์ด๋ฏ€๋กœ, ์ˆ˜ํ–‰
        completedAssignments.push(point);
        elapsedDay++;
        index++;
    }

    // 4. ํด๋ฆฌ์–ด ํ•œ ์ˆ™์ œ๋“ค ์ ์ˆ˜ ๊ณ„์‚ฐ ํ›„, ์ถœ๋ ฅ
    int totalPoint = 0;
    while (!completedAssignments.empty())
    {
        totalPoint += completedAssignments.top();
        completedAssignments.pop();
    }

    cout << totalPoint;
    return 0;
}

 

728x90
๋ฐ˜์‘ํ˜•