https://www.acmicpc.net/problem/1461
규칙을 찾는게 중요한 문제였다. 시작점 0에서 음수, 양수 편을 나누고 m만큼 left[m * i] , right[m * i] 간다음에
제일 큰 수에서는 0으로 다시 돌아오지 않고 그 자리에서 끝나면 된다.
유의할점은 left, right의 길이가 m으로 나누어 떨어지지 않을 경우 나머지 k만큼 먼저 간다음에 k에서 시작하여
m*i 만큼 계속 더해주는게 핵심이였다.
n,m = list(map(int,input().split()))
data = list(map(int,input().split()))
data.sort()
left = []
right = []
max_value = 0
for i in data:
if i < 0:
left.append(-i)
max_value = max(max_value,-i)
else:
right.append(i)
max_value = max(max_value,i)
res = 0
left = left[::-1]
left_value = len(left) // m
left_remainer = len(left) % m
right_value = len(right) // m
right_remainer = len(right) % m
if left_remainer > 0:
idx = left_remainer-1
for i in range(idx,len(left),m):
res += left[i] * 2
else:
for i in range(m-1,len(left),m):
res += left[i] * 2
if right_remainer > 0:
idx = right_remainer-1
for i in range(idx,len(right),m):
res += right[i] * 2
else:
for i in range(m-1,len(right),m):
res += right[i] * 2
print(res - max_value)
'Algorithm > Algorithm Problem' 카테고리의 다른 글
백준 2872 우리집엔 도서관이 있어(그리디) (0) | 2022.06.08 |
---|---|
백준 16926 배열 돌리기 1(구현) ★ (0) | 2022.06.04 |
백준 16943 숫자 재배치(순열, 구현) (0) | 2022.06.03 |
백준 1911 흙길 보수하기(구현,그리디) (0) | 2022.06.03 |
백준 15729 방탈출(그리디) (0) | 2022.06.03 |