BOJ 1826
μ°λ£ μ±μ°κΈ° μ±κ³΅
2 μ΄ 128 MB 5856 1716 1320 28.897% λ¬Έμ
μ±κ²½μ΄λ νΈλμ μ κΈ μμμ μ΄μ νλ€κ° νΈλμ μ°λ£ν±ν¬μ κ°μκΈ° ꡬλ©μ΄ λμ 1kmλ₯Ό κ°λλ° 1Lμ μ°λ£κ° μ λκ°κ² λμλ€. μ΄κ²μ κ³ μΉκΈ° μν΄μλ κ°μ₯ κ°κΉμ΄ λ§μμ κ°μΌ νλ€. κ·Έλ°λ° κ·Έλ₯ κ°λ€κ°λ μ€κ°μ μ°λ£κ° λ€ λΉ μ§ μκ° μλ€. λ€νμ€λ½κ²λ μ κΈ κ³³κ³³μ μ°λ£λ₯Ό μ±μΈ μ μλ μ£Όμ μκ° Nκ° μλ€. κ·Έλ°λ° μ κΈ μμμ μ€κ°μ μ°¨λ₯Ό λ©μΆλ νμλ λ§€μ° μνν νμμ΄λ―λ‘ μ£Όμ μμμ λ©μΆλ νμλ₯Ό μ΅μν νλ € νλ€.
κ·Έλ¦¬κ³ λ€νμ΄λ μ±κ²½μ΄μ νΈλμ λ§€μ° μ’μμ μ°λ£ ν±ν¬μλ μ°λ£μ μ νμ΄ μμ΄ λ§μ΄ μΆ©λΆν λ§μ΄ λ£μ μ μλ€κ³ νλ€. κ°κ°μ μ£Όμ μμ μμΉμ, κ° μ£Όμ μμμ μ»μ μ μλ μ°λ£μ μμ΄ μ£Όμ΄μ Έ μμ λ, μ£Όμ μμμ λ©μΆλ νμλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ κΈμ μΌμ§μ μ΄κ³ , μ±κ²½μ΄μ νΈλκ³Ό μ£Όμ μλ λͺ¨λ μΌμ§μ μμ μλ€. μ£Όμ μλ λͺ¨λ μ±κ²½μ΄μ νΈλμ κΈ°μ€μΌλ‘ μ€λ₯Έμͺ½μ μλ€.
μ λ ₯
첫째 μ€μ μ£Όμ μμ κ°μ N(1 ≤ N ≤ 10,000)κ° μ£Όμ΄μ§κ³ λ λ²μ§Έ μ€λΆν° N+1λ²μ§Έ μ€ κΉμ§ μ£Όμ μμ μ λ³΄κ° μ£Όμ΄μ§λ€. μ£Όμ μμ μ 보λ λκ°μ μ μ a,bλ‘ μ΄λ£¨μ΄ μ Έ μλλ° a(1 ≤ a ≤ 1,000,000)λ μ±κ²½μ΄μ μμ μμΉμμ μ£Όμ μ κΉμ§μ 거리, κ·Έλ¦¬κ³ b(1 ≤ b ≤ 100)λ κ·Έ μ£Όμ μμμ μ±μΈ μ μλ μ°λ£μ μμ μλ―Ένλ€. κ·Έλ¦¬κ³ N+2λ²μ§Έ μ€μλ λ μ μ Lκ³Ό Pκ° μ£Όμ΄μ§λλ° L(1 ≤ L ≤ 1,000,000)μ μ±κ²½μ΄μ μμΉμμ λ§μκΉμ§μ 거리, P(1 ≤ P ≤ 1,000,000)λ νΈλμ μλ μλ μ°λ£μ μμ μλ―Ένλ€.
μΆλ ₯
첫째 μ€μ μ£Όμ μμμ λ©μΆλ νμλ₯Ό μΆλ ₯νλ€. λ§μ½ λ§μμ λμ°©νμ§ λͺ»ν κ²½μ° -1μ μΆλ ₯νλ€.
μμ μ λ ₯ 1 볡μ¬
4 4 4 5 2 11 5 15 10 25 10
μμ μΆλ ₯ 1 볡μ¬
3β
17λ²λ§μ λ§μΆ λ¬Έμ μ΄λ€.
μ°λ£νλ, 거리νλλ₯Ό κΈ°μ€μΌλ‘ ν΄μΌλλ€λ κ²μ 3λΆλ§μ μμλλλ° κ²°κ΅ μ΄νλμ νμλ€.
κ²°κ΅ κ³μ μ΄ λ¬Έμ λ₯Ό νλ¦° μ΄μ λ
λΆλͺ μ°λ£λ₯Ό κΈ°μ€μΌλ‘ νμλ, κ°μμλ μ£Όμ μ(μ£Όμ μμ κ±°λ¦¬κ° μ°λ£λ³΄λ€ μμ κ²½μ°)μ μ°λ£μ μμ κ·Έλ₯ λν΄μ£Όλ©΄ λλ€.
μ μ΄κ±Έ ν·κ°λ Έλμ§λ λͺ¨λ₯΄κ² μ§λ§, μ°λ£μ μ μ μ΅λκ±°λ¦¬λ‘ μ‘κ³ λλ €λκ°λ©΄ λλλ° μ λ₯μμ μμΉλ₯Ό μ‘μ쀬λ€.
κ·Έλ¦¬κ³ κ±°κΈ°μ κ° κ±°λ¦¬λ§νΌ λΉΌμ£Όκ³ , μ°λ£λ§νΌ λν΄μ£Όκ³ . μ΄λ° κ³Όμ μμ λ°λ‘κ° μκΈ΄ κ² κ°λ€.
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
priority_queue<pair<int,int>, vector<pair<int,int>>, less<>>pq_fuel;
vector<pair<int,int>>v;
int N,L,P,ans, st,arr[10000];
int main(){
cin>>N;
for(int i=0; i<N; i++){
int a, b;
cin>>a>>b;
v.push_back({a,b});
}
sort(v.begin(), v.end());
cin>>L>>P;
while(P+st < L){
for(int i=0; i<v.size(); i++){
if(arr[i]) continue;
if(P >= v[i].first) {
arr[i] = 1;
pq_fuel.push({v[i].second, v[i].first});
}
}
if(pq_fuel.empty()){
cout<<-1;
return 0;
}
P += pq_fuel.top().first;
pq_fuel.pop();
ans += 1;
}
cout<<ans;
}