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
- 식단
- 알고리즘
- BaekJoon
- 유니온파인드
- Algorithm
- c++
- 서버개발캠프
- 스마일게이트
- 코딩테스트
- 투포인터
- 백준
- 코테
- 카카오인턴
- 삼성 #코테 #2020상반기 #c++
- 1편
- BFS
- 카카오
- 보석쇼핑
- 중반부
- Union-find
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- 소감
- Smilegate
- LIS #Algorithm #요소추적
Archives
- Today
- Total
짱아의 개발 기록장
백준 13904번. 과제(c++) / Greedy 본문
반응형
오랜만에 그리디 문제를 풀어봤다.
역시 그리디는 아이디어를 도출해내는 것이 참 어렵다...ㅎ
하지만, 그렇게 어려운 그리디 문제에 속하지는 않아서 생각보다 간단하게 해결할 수 있었다.
우선순위큐를 사용했고
맨 마지막에 있는 마감일 기준으로 우선순위큐에 값을 넣어서 각 날마다 가장 큰 값을 더해주었다.
아래는 놓치기 쉬운 반례들이다.
6
5 3
5 3
5 3
4 2
4 1
4 2
정답 : 13
4
9 9
9 9
9 9
1 10
정답 : 37
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 | // 과제 #include <iostream> #include <vector> #include <algorithm> #include <queue> using namespace std; int n, d, w; int ans = 0; vector<pair<int, int>> work; priority_queue<int> pq; bool cmp(const pair<int, int> &a, const pair<int, int> &b){ if(a.first==b.first){ return a.second>b.second; } return a.first>b.first; } int main() { cin>>n; for(int i=0; i<n; i++){ cin>>d>>w; work.push_back(make_pair(d, w)); } sort(work.begin(), work.end(), cmp); int days = work[0].first; int idx = 0; while(idx<n){ while(days==work[idx].first){ int deadline = work[idx].first; int score = work[idx].second; pq.push(score); idx++; } days--; if(pq.empty()) continue; ans += pq.top(); pq.pop(); } while(days-- && !pq.empty()){ ans += pq.top(); pq.pop(); } cout<<ans<<"\n"; return 0; } | cs |
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
백준 9461번. 파도반 수열(c++) / DP (0) | 2021.04.04 |
---|---|
백준 4803번. 트리(c++) / 유니온파인드 (0) | 2021.04.02 |
백준 7490번. 0 만들기(c++) / 구현 (0) | 2021.04.01 |
백준 1194번. 달이 차오른다, 가자(c++) / BFS+비트마스킹 (0) | 2021.04.01 |
백준 1525번. 퍼즐(c++) / BFS (0) | 2021.03.31 |
Comments