[백준] 1461번 도서관 (파이썬)

dongEon·2023년 3월 23일
0

난이도 : GOLD V

문제

각 책들의 원래 위치가 주어질 때, 책을 모두 제자리에 놔둘 때 드는 최소 걸음 수를 계산하는 프로그램을 작성
세준이는 한 걸음에 좌표 1칸씩 가며, 책의 원래 위치는 정수 좌표이다.
책을 모두 제자리에 놔둔 후에는 다시 0으로 돌아올 필요는 없다.
그리고 세준이는 한 번에 최대 M권의 책을 들 수 있다.

문제해결

  • plus와 minus 로 구분 한 다음
  • 내림차순 정렬 후 한번에 움직일 수 있는 책의 권수(m) x len(plus,minus)//m 으로 계산한다
  • 가장 거리가 먼 책은 마지막에 놔둔다. (돌아올 필요가 없기 때문에)
import sys

input = sys.stdin.readline

n,m = map(int,input().split())

dis = list(map(int, input().split()))

minus = []
plus = []
count = []

for i in dis:
  if i < 0:
    minus.append(abs(i))
  else :
    plus.append(i)

minus.sort(reverse=True)
plus.sort(reverse=True)


for i in range(len(minus)//m):
  count.append(minus[i*m])
if len(minus) % m > 0:
  count.append(minus[(len(minus)//m) * m])

for i in range(len(plus)//m):
  count.append(plus[i*m])
if len(plus) % m > 0:
  count.append(plus[(len(plus)//m) * m])

count.sort()

ans = count.pop() # 가장 먼거리 추출

ans += 2*sum(count)

print(ans)
profile
개발하면서 생긴 이슈와 알게된 점, 알고리즘 등을 기록하는 블로그입니다.

0개의 댓글