[백준] 1461번 도서관 - 파이썬/그리디

JinUk Lee·2023년 5월 24일
0

백준 알고리즘

목록 보기
59/78

https://www.acmicpc.net/problem/1461

from bisect import bisect_left

N,M = map(int,input().split())

S = list(map(int,input().split()))

S.sort()
zeroidx = bisect_left(S,0)

S_minus = S[:zeroidx]
S_plus = S[zeroidx:]


ans  = 0
ans_list = []

for i in range(len(S_minus)):
    if i%M == 0:
        ans_list.append(abs(S_minus[i]))

S_plus.sort(reverse=True)

for i in range(len(S_plus)):
    if i%M == 0:
        ans_list.append(S_plus[i])


print(2*sum(ans_list) - max(ans_list))

수열을 정렬한뒤 0을 기준으로 나눠준다.

그리고 M으로 나눴을때 나머지가 0인 값들만 저장해주고

저장한 거리 리스트를 두배한 값에서 가장 큰 값(왕복하지 않을 거리)를 뺀다.

profile
개발자 지망생

0개의 댓글