-
[BOJ] Greedy Algorithm알고리즘/BOJ 2020. 8. 28. 14:02
문제 출처
https://blog.naver.com/kks227/220775134486
탐욕적 기법(Greedy Algorithm) (수정: 2019-11-23)
먼저 가장 유명하고 기초적이지만, 입문만 쉽고 마스터는 어려운 그런 녀석들부터 강의하는 것이 좋겠죠.탐...
blog.naver.com
1931
https://www.acmicpc.net/problem/1931
1931번: 회의실배정
(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.
www.acmicpc.net
// // main.cpp // BOJ1931 // // Created by JSChang on 2020/08/22. // Copyright © 2020 JSChang. All rights reserved. // #include <bits/stdc++.h> using namespace std; struct discussion { int start; int end; }; bool comp(discussion d1, discussion d2) { if(d1.end==d2.end) return d1.start < d2.start; else return d1.end < d2.end; } int main(int argc, const char * argv[]) { int n, cur=0, num=0; cin >> n; vector<discussion> v; for (int i=0; i<n; i++) { int x; int y; cin >> x >> y; discussion d; d.start = x; d.end = y; v.push_back(d); } sort(v.begin(), v.end(), comp); for (auto ele : v) { if(ele.start>=cur) { cur = ele.end; num++; } } cout << num << endl; return 0; }
11000
https://www.acmicpc.net/problem/11000
11000번: 강의실 배정
첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (1 ≤ Si < Ti ≤ 109)
www.acmicpc.net
// // main.cpp // BOJ11000 // // Created by JSChang on 2020/08/22. // Copyright © 2020 JSChang. All rights reserved. // #include <bits/stdc++.h> using namespace std; struct subject { int start; int end; }; struct comp { bool operator()(subject s1, subject s2) { if(s1.start==s2.start) return s1.end > s2.end; return s1.start > s2.start; } }; priority_queue<subject, vector<subject>, comp> input; priority_queue<int, vector<int>, greater<int>> curTime; void addRoom(subject ele) { if(curTime.empty()) curTime.push(ele.end); else { if(curTime.top()<=ele.start) { curTime.pop(); } curTime.push(ele.end); } } int main(int argc, const char * argv[]) { int n; cin >> n; for (int i=0; i<n; i++) { int x; int y; cin >> x >> y; subject s; s.start = x; s.end = y; input.push(s); } while(!input.empty()) { addRoom(input.top()); input.pop(); } cout << curTime.size() << endl; return 0; }
참고 자료
Vector 구조체 정렬
c++ — 구조체의 벡터 정렬
다른 사람들이 언급했듯이 비교 함수를 사용할 수는 있지만 <연산자를 오버로드 할 수도 있으며 기본 less functor도 작동합니다. struct data { string Word; int number; bool operator < (const data& rhs) const { return
www.it-swarm.dev
C++ 우선 순위 사용법
https://twpower.github.io/93-how-to-use-priority_queue-in-cpp
[C++] C++ STL priority_queue 기본 사용법과 예제
Practice makes perfect!
twpower.github.io
C++ 우선 순위 큐 비교 연산자
c++ priority queue 예제 : compare 구조체만 잘 정의합시다.
priority_queue는 코딩 테스트에서 꽤 빈도 높게 출제되고 있는 자료 구조 중 하나입니다. 물론, set이나 map도 많이 보이긴 합니다. 여태까지 코딩 테스트 문제들을 쭉 보았을 때, 우선 순위 큐, 줄여
codingdog.tistory.com
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] DFS 1206번 2606번 2667번 1012번 (0) 2020.04.16