https://www.acmicpc.net/problem/1461
n, m = map(int, input().split())
book = list(map(int, input().split()))
left = []
right = []
max_book = 0
for i in book:
if i < 0:
left.append(i)
elif i > 0:
right.append(i)
if abs(i) > abs(max_book):
max_book = i
left.sort()
right.sort(reverse = True)
cnt = 0
for i in range(0, len(left), m):
if left[i] != max_book:
cnt += abs(left[i])
for i in range(0, len(right), m):
if right[i] != max_book:
cnt += right[i]
cnt *= 2
cnt += abs(max_book)
print(cnt)
이 문제에서 가장 먼저 알아야 할 점은 음수와 양수를 따로 나누어 계산한다는 점이다.
left
에 음수를 넣고, rifhgt
에 양수를 넣고 가장 먼 거리를 제외한 좌표부터
책을 놔두고 오면 된다.
책은 최대 m개를 들 수 있으므로 m번째씩 반복하게 만들었다.
1. 음수와 양수를 나눠야 한다
2. 거리가 먼 순서로 정렬해야한다.
3. 예를들어 두 개씩 들수있다면, 두 번씩 건너띄며 반복한다.
4. 갔다가 돌아와야 하므로 *2해준다
5. 마지막으로 가장 먼 거리를 더해준다.