https://www.acmicpc.net/problem/1826
1826번: 연료 채우기
첫째 줄에 주유소의 개수 N(1 ≤ N ≤ 10,000)가 주어지고 두 번째 줄부터 N+1번째 줄 까지 주유소의 정보가 주어진다. 주유소의 정보는 두개의 정수 a,b로 이루어 져 있는데 a(1 ≤ a ≤ 1,000,000)는 성경
www.acmicpc.net
로직조차 생각이 잘 나지 않았던 문제
- (연료의 위치, 채울 수 있는 연료의 양)을 리스트에 담아 연료 위치 순으로 sort한다.
- heap에는 현재 연료양으로 지나갈 수 있는 위치들이 연료들을 최대힙으로 담는다.
- 만약 현재 연료양으로 지나갈 수 없는 위치라면, 그 이후는 다 지나갈 수 없으니까 일단 해결하고 봐야한다.
- 그래서 while heap문으로 연료양을 채운다. (최대 연료양 순으로)
- 만약 len(heap) == 0이라는 것은 더 이상 채울 연료가 없다는 뜻이므로 현재 가진 연료양 < 지나가야 하는 거리 이면 -1을 리턴한다.
- 즉, for문을 돌면서 i 지점에서 연료를 채운다는 개념이 아니라, 그 지점을 지나갈 수 있게끔 heap에서 연료들을 꺼낸다는 개념이다.
import sys
import heapq
n = int(sys.stdin.readline())
info = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]
arrive, fuel = map(int, sys.stdin.readline().split())
info.append([arrive, 0])
info.sort()
heap = []
answer = 0
for i in range(n + 1):
dist, plus = info[i]
if fuel < dist:
while heap:
fuel += -heapq.heappop(heap)
answer += 1
if fuel >= dist:
break
if len(heap) == 0 and fuel < dist:
answer = -1
break
else:
heapq.heappush(heap, -plus)
print(answer)
https://lcyking.tistory.com/14
[Python] 백준 1826: 연료채우기
1826번: 연료 채우기 (acmicpc.net) 1826번: 연료 채우기 첫째 줄에 주유소의 개수 N(1 ≤ N ≤ 10,000)가 주어지고 두 번째 줄부터 N+1번째 줄 까지 주유소의 정보가 주어진다. 주유소의 정보는 두개의 정수
lcyking.tistory.com
'알고리즘' 카테고리의 다른 글
[백준] 1039 교환 파이썬 (0) | 2023.07.11 |
---|---|
[백준] 1508번 레이스 (0) | 2023.07.10 |
[이분탐색] 백준 3745 오름세(가장 긴 증가하는 부분수열) (0) | 2022.03.28 |
[누적합] 백준 3020 개똥벌레 (0) | 2022.03.20 |
[dijkstra] 백준 11779 최소비용 구하기2(다익스트라 + 경로 노드) (0) | 2022.03.19 |
댓글