반응형
코드
n, m = map(int,input().split())
book = list(map(int,input().split()))
pos = []
neg = []
l = []
for i in book:
if i > 0:
pos.append(i)
else:
neg.append(abs(i))
pos.sort(reverse=True)
neg.sort(reverse=True)
for i in range(len(pos)):
if i % m == 0:
l.append(pos[i])
for i in range(len(neg)):
if i % m == 0:
l.append(neg[i])
l.sort()
ans = 2* sum(l) - l[-1]
print(ans)
설명
주어진 책의 위치를 음수와 양수로 나눈 뒤 내림차순으로 정렬을 한다. 음수는 나눌 때 절댓값으로 바꿔준다.
리스트의 인덱스 값이 M으로 나누어떨어지면 리스트 l에 넣어준다.
책을 모두 제자리에 놔둔 후에는 다시 0으로 돌아올 필요가 없기 때문에 l에 들어있는 숫자 중 가장 큰 값을 가장 마지막에 놔둬야 한다.
예를 들어서 2권을 한번에 옮길 수 있고 2, 11에 책을 놔둬야 하는 상황이면
11을 갔다가 2를 들려서 0으로 돌아오는 데 총 11*2 걸음이 필요하다.
따라서 리스트 l에 들어있는 숫자의 합에 2를 곱한 후, 마지막에는 다시 0으로 돌아올 필요가 없으므로 가장 큰 값을 빼준다.
반응형
'알고리즘 > 그리디' 카테고리의 다른 글
[백준][Python] 2012번 등수 매기기 (0) | 2022.11.03 |
---|---|
[백준][Python] 수들의 합 (0) | 2022.11.01 |
[백준][Python] 12904번 A와 B (0) | 2022.10.28 |
[백준][Python] 1339번 단어 수학 (0) | 2022.10.27 |
[백준][Python] 11256번 사탕 (1) | 2022.09.20 |
댓글