1. 배열(arr)에 곱하기 2 (책 위치까지 갔다가 돌아와야하기에)
2. 배열(arr) 정렬
3. 배열(arr) 이진탐색으로 0 위치 찾기
4. 배열(arr)에서 0 위치 기준으로 좌 우 나누기(arrMin, arrMax)
5. for문 / 배열(arrMin) 0 ~ 배열(arrMin) 길이까지 돌면서,
M(한번에 들 수 있는 책) 씩 건너뛰며 얻은 값들을 abs로 감싸준 후 최종결과값(result)에 더한다.
6. 배열(arrMax)도 5번처럼 돌린다.
7. 마지막은 가서 0번위치로 돌아오지 않아도 되므로
두 배열(arrMin, arrMax) 에서 각각 가장 큰 값을 가져와 abs로 감싸준 후 result에서 빼준다.
from bisect import bisect_left
import sys
input = sys.stdin.readline
N, M = map(int, input().strip().split(' '))
arr = list(map(lambda x: x*2, map(int, input().strip().split(' '))))
arr.sort()
idx = bisect_left(arr, 0)
arrMin = arr[:idx]
arrMax = arr[idx:][::-1]
result = 0
# print(N, M, arrMin, arrMax)
for i in range(0, len(arrMin), M):
result += abs(arrMin[i])
for i in range(0, len(arrMax), M):
result += abs(arrMax[i])
result -= (max(abs(arrMin[0] if arrMin else 0),
abs(arrMax[0] if arrMax else 0))//2)
print(result)
반응형
'Algorithm > 백준' 카테고리의 다른 글
백준 오목 2072번 python (0) | 2022.07.01 |
---|---|
백준 1253번 좋다 python (0) | 2022.07.01 |
백준 최소비용 구하기 성공 1916 javascript (0) | 2022.06.30 |
콘센트 23843 python (0) | 2022.06.29 |
특정한 최단 경로 1504 javascript (0) | 2022.06.29 |
댓글