Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 유니티
- mysqld.sock
- 우분투
- 원형
- 단어 수학
- 백준
- 알고리즘 목차
- MySQL
- 탄막 이동
- 마우스 따라다니기
- 수 만들기
- 2020 KAKAO BLIND RECRUITMENT
- 문자열 압축
- 강의실2
- 윈도우
- AI Hub
- 영상 프레임 추출
- 3273
- 걷는건귀찮아
- 토글 그룹
- 탄막 스킬 범위
- 18249
- 알고리즘
- 탄막
- 회의실 배정
- c#
- 그리디알고리즘
- 3344
- 자료구조 목차
- SWEA
Archives
- Today
- Total
와이유스토리
[그리디] 백준 8980 택배 C++ 본문
https://www.acmicpc.net/problem/8980
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Info {
int start, end, cnt;
};
bool operator < (const Info &a, const Info &b) {
if (a.end != b.end) return a.end < b.end; // 도착 번호 오름차순
else if (a.start != b.start) return a.start < b.start;
else return a.cnt < b.cnt;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n, c, m;
cin >> n >> c >> m;
vector<Info> v(m, {0, 0, 0});
for(int i=0; i<m; i++) {
cin >> v[i].start >> v[i].end >> v[i].cnt;
v[i].start--; v[i].end--;
}
sort(v.begin(), v.end(), less<>());
vector<int> box(n, 0);
int answer = 0;
for(int i=0; i<m; i++) {
Info now = v[i];
int cnt = 0;
for(int j=now.start; j<now.end; j++) cnt = max(cnt, box[j]); // j일 때, 트럭 안 박스 개수
int load = min(now.cnt, c - cnt); // 트럭 안 여유 개수
for(int j=now.start; j<now.end; j++) box[j] += load; // 트럭에 넣기
answer += load;
}
cout << answer;
return 0;
}
// 실패
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
struct Info {
int start, end, cnt;
};
bool operator > (const Info &a, const Info &b) {
if (a.end != b.end) return a.end > b.end;
else if (a.start != b.start) return a.start > b.start;
else return a.cnt > b.cnt;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n, c, m;
cin >> n >> c >> m;
priority_queue<Info, vector<Info>, greater<>> v;
int start, end, cnt;
for(int i=0; i<m; i++) {
cin >> start >> end >> cnt;
v.push({start, end, cnt});
}
priority_queue<Info, vector<Info>, greater<>> truck;
int answer = 0;
int box = 0;
for(int i=1; i<=m; i++) {
while(!truck.empty()) { // 하차
Info now = truck.top();
if (now.end != i) break;
truck.pop();
box -= now.cnt;
answer += now.cnt;
}
while(!v.empty()) { // 상차
Info now = v.top();
if (now.start != i) break;
v.pop();
if (box >= c) break;
int load = (c - box > now.cnt)? now.cnt : c - box;
box += load;
truck.push({now.start, now.end, load});
}
}
cout << answer;
return 0;
}
'코딩테스트 > 그리디|힙' 카테고리의 다른 글
[그리디] 백준 18185, 18186 라면 사기 (Small) (Large) C++ (0) | 2023.09.28 |
---|---|
[그리디] 백준 1715 카드 정렬하기 C++ (0) | 2023.09.27 |
[그리디] 프로그래머스 [1차] 셔틀버스 C++ (0) | 2023.03.22 |
[그리디] 백준 2839 설탕 배달 C++ (0) | 2022.02.09 |
[그리디] 백준 1931번 회의실 배정 C++ (0) | 2022.01.19 |
Comments