본문 바로가기
Algorithm/백준

백준 도서관 1461 python

by eclipse7727 2022. 6. 30.
 

1461번: 도서관

세준이는 도서관에서 일한다. 도서관의 개방시간이 끝나서 세준이는 사람들이 마구 놓은 책을 다시 가져다 놓아야 한다. 세준이는 현재 0에 있고, 사람들이 마구 놓은 책도 전부 0에 있다. 각 책

www.acmicpc.net

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

댓글