[Greedy] 도서관

박고은·2023년 5월 13일
0

알고리즘

목록 보기
5/12

n, m = map(int, input().split())
books = list(map(int,input().split()))

pos, neg = sorted([x for x in books if x>0], reverse=True), sorted([x for x in books if x<0])
steps = []
    
for i in range((n//m)+1):
    if [x for x in pos[m*i:(m*i)+m]]: steps.append(max([x for x in pos[m*i:(m*i)+m]]))
    if [x for x in neg[m*i:(m*i)+m]]: steps.append(min([x for x in neg[m*i:(m*i)+m]]))
   
oneway = abs(max(steps)) if abs(max(steps))>abs(min(steps)) else abs(min(steps))
    
print(sum([abs(x) for x in steps])*2 - oneway)

음수 위치 책 리스트와 양수 위치 책 리스트를 따로 구분해서 생성하고 절댓값이 큰 순서대로 정렬
들 수 있는 책 수만큼씩 슬라이싱하고 음수 리스트에서는 min, 양수 리스트에서는 max로 거리를 정하고 절댓값이 가장 큰 거리만 편도로 계산

0개의 댓글