일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 알고리즘
- 머신러닝
- 파이썬 강의
- 공부
- dp
- it
- 2020
- 강의
- python 강좌
- 슬픔
- mmcv
- 자작시
- 2021
- python 강의
- mmdetection
- 백준
- 프로그래밍
- 파이썬 강좌
- 라즈베리파이 모니터
- 철학
- 라즈베리파이
- 라즈베리파이3
- BOJ
- python
- 다이나믹프로그래밍
- 계획
- dynamic programming
- C++
- 파이썬
- 강좌
Archives
- Today
- Total
Stargazer
[백준] 1202번 : 보석 도둑 (그리디 알고리즘) C++ 풀이 본문
Undergraudate basics(학부생 기초)/자료구조, 알고리즘
[백준] 1202번 : 보석 도둑 (그리디 알고리즘) C++ 풀이
COM2IT 2022. 5. 20. 11:40반응형
접근:
가방에는 무조건 1개만 넣을 수 있고, 최대한 넣었을 때 가장 가치가 높은 거를 넣어야 하는데,
가방 중에 가장 작은 가방에 들어갈 정도의 보석이라면, 다른 가방에는 무조건 들어갈 수 있게 된다.
전략:
가방과 보석을 크기 오름차순으로 정렬을 한다.
모든 가방을 조사하면서, 이 가방에 들어갈 수 있는 보석을 모두 꺼내어 놓은 뒤, 이 중 가장 가치 있는 것을 넣어서
하나 씩 가방을 채운다. 그렇게 되면, 들어갈 수 있는 가방 중에 가장 가치 있는 것 부터 넣을 수 있게 된다.
이때, 우선순위 큐를 이용하면, 가방에 들어갈 수 있는 보석 중에 가장 가치 있는 것을 선택하기 수월하다.
각 보석은 조사할 때 한 번 우선순위 큐에 들어간 보석은 더는 조사하지 않는다. 이유는 우선순위 큐의 성질에 의해서 가장 가치가 있는 것을 알아서 선택해주기 때문에 굳이 따로 조사할 필요가 없기 때문
구현:
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#define pii pair<int,int>
using namespace std;
int n,k;
vector<pii> jew;
priority_queue<int> pq; //보석
vector<int> inven;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> k;
jew.resize(n);
inven.resize(k);
for(int i=0;i<n;i++){
cin >> jew[i].first >> jew[i].second;
}
for(int i=0;i<k;i++){
cin >> inven[i];
}
sort(inven.begin(), inven.end());
sort(jew.begin(), jew.end());
int idx = 0;
long long result = 0;
for(auto c : inven){
while(idx < n && c >= jew[idx].first){ //가장 작은 가방에 들어갈 정도면 그 뒷 가방도 다 가능
pq.push(jew[idx++].second);
}
if(!pq.empty()){ // 가능 한 것 중에서 가장 가치가 큰 것부터
result += pq.top(); pq.pop();
}
}
cout << result << '\n';
return 0;
}
반응형
'Undergraudate basics(학부생 기초) > 자료구조, 알고리즘' 카테고리의 다른 글
[백준] 1644번: 소수의 연속합 c++ 풀이 (에라토스테네스의 체, 투 포인터) (0) | 2022.06.25 |
---|---|
[백준] 1305번 : 광고 (KMP 알고리즘) c++ 풀이 (0) | 2022.05.29 |
[백준] 1007번: 벡터 매칭 (수학) c++ 풀이 (0) | 2022.05.20 |
[백준] 1197번 : 최소 스패닝 트리 c++ 풀이 (0) | 2022.05.17 |
[백준] 9465번: 스티커 C++ 풀이 (DP) (0) | 2022.05.13 |
Comments