BOJ_6068

한상현·2021년 5월 11일
0

Algorithm

목록 보기
11/33

👍 이런 비슷한 문제를 풀어봤던 생각이 날 듯 말 듯, 아무튼 쉽게 풀었다.

💻 6068번 : 시간 관리하기

  • 끝나는 시간이 가장 큰 것부터 내림차순 정렬해주면 된다.
  • 고로 정렬그리디로 손 쉽게 풀이 가능.
  • 순서대로 끝나는 시간 - 걸리는 시간 으로 나온 값이 다음 끝나는 시간보다 크면 갱신.
  • 더 작으면 해당 값에서 걸리는 시간 빼주는 방식으로 진행.
💻 전체 코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <queue>
#include <string.h>

using namespace std;

#define endl "\n"

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

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int N;

    cin >> N;

    vector<pair<int,int> > v;

    for (int i = 0; i < N;i++)
    {
        int first, second;
        cin >> first >> second;
        v.push_back(make_pair(first, second));
    }

    sort(v.begin(), v.end(), compare);

    int num = v[0].second - v[0].first;
    for (int i = 1; i < v.size(); i++)
    {
        if(num > v[i].second)
            num = v[i].second - v[i].first;
        else
            num -= v[i].first;
    }
    if(num < 0)
        cout << -1 << endl;
    else
        cout << num << endl;
}

아! 마지막 나온 값이 음수이면 일을 모두 마치지 못한 것이니 if문을 통해 답을 나눠줄 것.

profile
의 공부 노트.

0개의 댓글