문제풀이/백준

BOJ1461 (도서관)

촙발자 2023. 2. 16. 08:43

1. 제일 큰 수는 왕복이 아닌 편도로 가게 하자!

2. (1) 모두 음수인 경우 (2) 모두 양수인 경우 (3) 절대값이 가장 큰 수가 음수이고 양수가 존재하는 경우 (4) 절대값이 가장 큰 경우가 양수이고 음수가 존재하는 경우

 

이렇게 4개의 경우를 나누어 코드를 작성했습니다.

a,b = map(int,input().split())
list1 = list(map(int,input().split()))
list1.sort()
result =0
list2=[]
list3=[]
#음수와 양수를 따로 계산하자.
for i in list1:
    if i < 0:
        list2.append(i) #음수
    else:
        list3.append(i) #양수

if not list2:
    result+=list3[-1]
    for i in range(len(list3)-1-b,-1,-b):
        result+=list3[i]*2

if not list3:
    result+=abs(list2[0])
    for i in range(b,len(list2),b):
        result+=abs(list2[i])*2

if (list2 and list3 and abs(list2[0])>list3[-1]):   
    result+=abs(list2[0])
    for i in range(b,len(list2),b):
        result+=abs(list2[i])*2
    for i in range(len(list3)-1,-1,-b):
        result+=list3[i]*2

if (list2 and list3 and abs(list2[0])<list3[-1]):
    result+=list3[-1]
    for i in range(len(list3)-1-b,-1,-b):
        result+=list3[i]*2
    for i in range(0,len(list2),b):
        result+=abs(list2[i])*2

print(result)