본문 바로가기
BOJ

8980. 택배

by hyunnwoo 2023. 7. 18.

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

 

8980번: 택배

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

www.acmicpc.net

 

 

티어 : 골드1

 

struct 구조체와 std sort를 활용해 택배가 도착하는 마을의 번호가 작은 배달 순서로, 도착 마을의 번호가 같다면 출발 마을의 번호가 큰 순서대로 정렬하였다.

 

정렬된 순서대로 배달을 진행하여 답을 구하였다.

 

#include<stdio.h>
#include<algorithm>

using namespace std;;

int n, c, m, ans;
int box[2005];

typedef struct{
    int s, e, cnt;
} transport;
transport arr[10005];

bool condition(transport &i, transport &j){
    if(i.e < j.e) return true;
    else if(i.e == j.e && i.s > j.s) return true;
    return false;
}

int main()
{
    scanf("%d %d", &n ,&c);
    scanf("%d", &m);

    for(int i=0 ; i<m ; i++) scanf("%d %d %d", &arr[i].s, &arr[i].e, &arr[i].cnt);
    sort(arr, arr+m, condition);

    for(int i=0 ; i<m ; i++){
        int findmax = 100000;
        for(int j=arr[i].s ; j<arr[i].e ; j++){
            findmax = min(findmax, min(box[j]+arr[i].cnt, c) - box[j]);
        }
        for(int j=arr[i].s ; j<arr[i].e ; j++){
            box[j] += findmax;
        }
        ans += findmax;
    }

    printf("%d", ans);
}

'BOJ' 카테고리의 다른 글

1086. 박성원  (0) 2023.07.20
10868. 최솟값  (0) 2023.07.19
1300. K번째 수  (0) 2023.07.18
2042. 구간 합 구하기  (0) 2023.07.18
8983. 사냥꾼  (0) 2023.06.28