반응형
문제링크 : 1826번: 연료 채우기 (acmicpc.net)
1826번: 연료 채우기
첫째 줄에 주유소의 개수 N(1 ≤ N ≤ 10,000)가 주어지고 두 번째 줄부터 N+1번째 줄 까지 주유소의 정보가 주어진다. 주유소의 정보는 두개의 정수 a,b로 이루어 져 있는데 a(1 ≤ a ≤ 1,000,000)는 성경
www.acmicpc.net
> 풀이
입력받은 거리 / 연료 값을 거리 순으로 정렬한다
남은 연료 대비 갈 수 있는 주유소들을 우선순위 큐(최대 힙)에 저장 -> 다음 주유소에 도착할 수 있을 때까지 우선순위 큐에서 주유소를 빼냄(빼내는 횟수 카운트) -> 연료 총합이 목표거리에 도달할 때까지 반복
#include <bits/stdc++.h>
using namespace std;
priority_queue<int, vector<int>, less<int> >pq;
pair<int, int> fuel[10000];
int N, L, P, cnt;
int main(void) {
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%d %d", &fuel[i].first, &fuel[i].second);
}
sort(fuel, fuel + N);
scanf("%d %d", &L, &P);
int idx = 0;
while (L > P) {
while (fuel[idx].first <= P && idx < N)
pq.push(fuel[idx++].second);
if (!pq.empty()) {
P += pq.top(), pq.pop();
cnt++;
}
else if (idx == N || fuel[idx].first > P) {
cnt = -1;
break;
}
}
printf("%d", cnt);
return 0;
}
반응형
'알고리즘 (백준) > BOJ 길라잡이 (1)' 카테고리의 다른 글
백준 2110 (공유기 설치) / C++ (0) | 2021.07.12 |
---|---|
백준 15711 (환상의 짝꿍) / C++ (0) | 2021.05.31 |
백준 13305 (주유소) / C++ (0) | 2021.05.20 |
백준 1655 (가운데를 말해요) / C++ (0) | 2021.05.18 |
백준 1715 (카드 정렬하기) / C++ (0) | 2021.05.14 |