알고리즘

[백준 알고리즘] 1461번 도서관. 파이썬(python)

삶은겨란 2022. 7. 13. 18:39

제일 먼 거리를 마지막에 방문하는 것이 포인트

n,m=map(int,input().split())
a=list(map(int,input().split()))
positive=[]
nagative=[]

for i in range(n):
    if a[i]>0: # 양수
        positive.append(a[i])
    else: # 음수
        nagative.append(a[i])

positive.sort(reverse=True) # 내림차순
nagative.sort() # 오름차순

result=0
visit=[]
for i in range(0,len(nagative),m): # m개씩 띄어서 
    visit.append(-nagative[i]) # 양수로 바꿔 저장
for i in range(0,len(positive),m):
    visit.append(positive[i])

result=max(visit) # 가장 큰 값은 마지막에 방문하므로 더하기 (돌아올 필요가 없어서 *2를 안함)
visit.pop(visit.index(max(visit))) # 가장 큰 값 리스트에서 제거
result+=sum(visit)*2 # 나머지 값들을 더해서 *2

print(result)