Henu
개발냥발
Henu
전체 방문자
오늘
어제
  • 분류 전체보기 (411)
    • DevOps (52)
      • Kubernetes (19)
      • Docker (14)
      • AWS (3)
      • Nginx (4)
      • Linux (4)
      • ArgoCD (1)
      • CN (2)
      • NATS (0)
      • Git (5)
    • Back-End (30)
      • Django (18)
      • Spring (5)
      • JPA (1)
      • MSA (5)
    • CS (87)
      • SystemSoftware (20)
      • OS (25)
      • Computer Architecture (16)
      • Network (23)
      • Database (2)
    • Lang (21)
      • Java (9)
      • Python (4)
      • C# (8)
    • Life (12)
    • 블록체인 (2)
    • Algorithm (204)
      • BOJ (160)
      • 프로그래머스 (19)
      • LeetCode (4)
      • SWEA (1)
      • 알고리즘 문제 해결 전략 (8)
      • DS, algorithms (7)
      • Checkio (5)
    • IT (2)

블로그 메뉴

  • GitHub
  • 글쓰기
  • 관리자

공지사항

  • Free!

인기 글

태그

  • django
  • boj
  • Network
  • Kubernetes
  • BFS
  • 백트래킹
  • 프로그래머스
  • DFS
  • 다이나믹 프로그래밍
  • docker

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Henu

개발냥발

[백준 8980] 택배 C++
Algorithm/BOJ

[백준 8980] 택배 C++

2021. 6. 9. 00:00
 

8980번: 택배

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

www.acmicpc.net

그리디 | 정렬

 


1. 문제 해결 아이디어

 

[백준 1700] 멀티탭 스케줄링 C++

1700번: 멀티탭 스케줄링 기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면

hyeo-noo.tistory.com

위 문제와 비슷한 느낌이다.

미래에 배송될 정보들을 모두 알고 있으므로

마을에 도착해서 박스를 받을 때마다, 먼저 도착하는 마을에 배송할 박스를 최대로 해주면 된다. (더 나중에 있는 마을의 박스를 빼면서)

 

1번 마을부터 순서대로 방문하므로 도착지를 번호순으로 오름차순 정렬은 필수이다.


2. 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <bits/stdc++.h>
#define pii pair<int, int>
 
using namespace std;
 
vector< pii > deli[2001];
int truck[2001];
 
int N, M, C;
int truck_capacity, result;
 
void input(){
    cin >> N >> C >> M;
    int u, v, n;
    for(int i = 0; i < M; i++){
        cin >> u >> v >> n;
        deli[u].push_back({v, n});
    }
    
    // 배송지 번호 순으로 오름차순 정렬
    for(int i = 1; i <= N; i++){
        sort(deli[i].begin(), deli[i].end());
    }
}
 
void solve(){
    for(int i = 1; i <= N; i++){
        // i번째 마을에 짐 배달 완료
        result += truck[i];
        truck_capacity -= truck[i];
        
//        cout << "현재 마을 : " << i << "\n";
//        cout << "now capacity : " << truck_capacity << "\n";
//        cout << "now result : " << result << "\n=========\n";
        
        // i마을의 배달 정보 확인
        for(auto &w : deli[i]){
 
            int box_num = w.second;
            int dest = w.first;
            
            // 전부 트럭에 실을 수 있으면
            if(box_num + truck_capacity <= C){
                truck_capacity += box_num;   // 트럭의 용량 채워짐
                truck[dest] += box_num;  // 트럭이 도착지에서 내려야 할 
            }
            else{   // 트럭에 일부만 실어야 할 경우
                // 비워야 할 용량
                int cd = box_num - (C - truck_capacity);
                
                // 실을 짐의 도착지보다 먼 곳의 짐 빼기
                for(int k = N; k >= dest+1; k--){
                    if(truck[k] >= cd){
                        truck[k] -= cd;
                        cd = 0;
                        break;
                    }
                    else{
                        cd -= truck[k];
                        truck[k] = 0;
                    }
                }
                truck_capacity = C;
                truck[dest] += (box_num - cd);
            }
        }
    }
    
    cout << result;
}
 
int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    input();
    solve();
    
    return 0;
}
 
Colored by Color Scripter
cs

 

 

 

'Algorithm > BOJ' 카테고리의 다른 글

[백준 2150] Strongly Connected Component C++  (0) 2021.06.10
[백준 1600] 말이 되고픈 원숭이 C++  (0) 2021.06.09
[백준 1167] 트리의 지름 C++  (0) 2021.06.07
[백준 1328] 고층 빌딩 C++  (0) 2021.06.07
[백준 4811] 알약 C++  (0) 2021.06.06
    'Algorithm/BOJ' 카테고리의 다른 글
    • [백준 2150] Strongly Connected Component C++
    • [백준 1600] 말이 되고픈 원숭이 C++
    • [백준 1167] 트리의 지름 C++
    • [백준 1328] 고층 빌딩 C++

    티스토리툴바