1461 도서관

정민용·2023년 4월 22일

백준

목록 보기
144/286

문제

세준이는 도서관에서 일한다. 도서관의 개방시간이 끝나서 세준이는 사람들이 마구 놓은 책을 다시 가져다 놓아야 한다. 세준이는 현재 0에 있고, 사람들이 마구 놓은 책도 전부 0에 있다. 각 책들의 원래 위치가 주어질 때, 책을 모두 제자리에 놔둘 때 드는 최소 걸음 수를 계산하는 프로그램을 작성하시오. 세준이는 한 걸음에 좌표 1칸씩 가며, 책의 원래 위치는 정수 좌표이다. 책을 모두 제자리에 놔둔 후에는 다시 0으로 돌아올 필요는 없다. 그리고 세준이는 한 번에 최대 M권의 책을 들 수 있다.

# 1461
import sys
input = lambda: sys.stdin.readline().strip()

# 책의 위치가 양수와 음수 구분
# m개씩 해서 거리 구하기 (최대부터 계산)

n, m = map(int, input().split())
book = list(map(int, input().split()))
book_p, book_m = [], []

book.sort()
for b in book:
    if b > 0:
        book_p.append(b)
    else:
        book_m.append(b)
book_m = book_m[::-1]
        
def count_book(output, array, m):
    while len(array) > 0:
        dist_now = []
        for _ in range(m):
            if len(array) == 0:
                break
            dist_now.append(abs(array.pop()))
        output.append(max(dist_now))
        
dist = []
count_book(dist, book_p, m)
count_book(dist, book_m, m)
    
dist.sort(reverse = True)
    
for i in range(1, len(dist)):
    dist[i] *= 2
    
print(sum(dist))

백준 1461 도서관

0개의 댓글