danbibibi
article thumbnail
Published 2024. 1. 25. 22:56
BOJ 8980번: 택배 문제 풀이/백준

문제

문제 바로가기> BOJ 8980번: 택배

 

8980번: 택배

입력의 첫 줄은 마을 수 N과 트럭의 용량 C가 빈칸을 사이에 두고 주어진다. N은 2이상 2,000이하 정수이고, C는 1이상 10,000이하 정수이다. 다음 줄에, 보내는 박스 정보의 개수 M이 주어진다. M은 1이

www.acmicpc.net

 

 

풀이

도착지를 기준으로 오름차순 정렬하여, 현재 보낼 수 있는 양의 최대치를 구 방식으로 문제를 풀었다!

그리디는 진짜 ,, 생각해내기가 쉽지 않다 ,,

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

struct PARCEL {
    int s, e, c;
    bool operator < (const PARCEL &p) const {
        if(e == p.e) return s < p.s;
        return e < p.e;
    }
};

int N, C, M;
int capacity[MAX];
vector<PARCEL> parcel;

void input() {
    cin >> N >> C >> M;

    int s, e, c;
    for (int i = 0; i < M; i++) {
        cin >> s >> e >> c;
        parcel.push_back({ s, e, c });
    }
}

void solve() { // 트럭 한 대로 배송할 수 있는 최대 박스 수 구하기

    // 1. 도착지를 기준으로 오름차순 정렬    
    sort(parcel.begin(), parcel.end());

    // 2. 각 지점에서 실을 수 있는 양 구하기
    int ans=0;
    for(auto p : parcel){
        int max_cap=0, send=0;
        for(int i=p.s; i<p.e; i++) max_cap = max(max_cap, capacity[i]);
        send = min(C-max_cap, p.c);
        ans += send;
        for(int i=p.s; i<p.e; i++) capacity[i]+=send;
    }
    cout << ans;
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    input();
    solve();
}

'문제 풀이 > 백준' 카테고리의 다른 글

BOJ 2812번: 크게 만들기  (0) 2024.01.30
BOJ 6549번: 히스토그램에서 가장 큰 직사각형  (1) 2024.01.30
BOJ 1963번: 소수 경로  (1) 2024.01.21
BOJ 9935번: 문자열 폭발  (0) 2024.01.05
BOJ 2666번: 벽장문의 이동  (0) 2024.01.03
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로