-
Notifications
You must be signed in to change notification settings - Fork 96
/
[18]_2.py
37 lines (30 loc) · 1003 Bytes
/
[18]_2.py
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
32
33
34
35
36
37
import heapq
n, m = map(int, input().split(' '))
array = list(map(int, input().split(' ')))
positive = []
negative = []
# 가장 거리가 먼 책까지의 거리
largest = max(max(array), - min(array))
# 최대 힙(Max Heap)을 위해 원소를 음수로 구성
for i in array:
# 책의 위치가 양수인 경우
if i > 0:
heapq.heappush(positive, -i)
# 책의 위치가 음수인 경우
else:
heapq.heappush(negative, i)
result = 0
while positive:
# 한 번에 m개씩 옮길 수 있으므로 m개씩 빼내기
result += heapq.heappop(positive)
for _ in range(m - 1):
if positive:
heapq.heappop(positive)
while negative:
# 한 번에 m개씩 옮길 수 있으므로 m개씩 빼내기
result += heapq.heappop(negative)
for _ in range(m - 1):
if negative:
heapq.heappop(negative)
# 일반적으로 왕복 거리를 계산하지만, 가장 먼 곳은 편도 거리 계산
print(-result * 2 - largest)