문제풀이/백준
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)