1461

Leeys·2022년 1월 7일

백준

목록 보기
5/14

풀이1

  1. 각 책들의 좌표를 배열로 받아 저장한다.
  2. 현재 위치값 변수와 배열 안에 값 중 두 곳을 갔을 들렀을 때 가장 적은 거리가 나오는 값을 계산한다 배열을 돌며 계산한다.
  3. 배열을 오름차순으로 정렬하고
    양수이면 가장 큰값부터 차례대로 들 수 있는 권수를 들고 옮긴다 이 때 옮기는 거리는 같이 든 책들 중 가장 큰값이다
  4. 음수도 똑같이 절대값이 가장 큰 순서대로 정렬하고 3번을 실행한다
  5. 권수가 남더라도 음수와 양수를 같이 들면 손해이다
n, m = map(int, input().split())

plusData = []
minusData = []
res = []

data = list(input().split())
for i in data:
  if int(i) > 0:
    plusData.append(int(i))
  else:
    minusData.append(int(i))

plusData.sort(reverse =True)
minusData.sort()

if plusData[0] > abs(minusData[0]):
  for i in range(m):
    if len(plusData) == 0:
      break
    if i == 0:
      res.append(plusData[0])
    del plusData[0]

if plusData[0] < abs(minusData[0]):
  for i in range(m):
    if len(minusData) == 0:
      break
    if i == 0:
      res.append(abs(minusData[0]))
    del minusData[0]


while True:
  if len(plusData) == 0:
    break
  
  for i in range(m):
    if len(plusData) == 0:
      break
    
    if i == 0:
      res.append(plusData[0] * 2)
    del(plusData[0])
    
while True:
  if len(minusData) == 0:
    break
  
  for i in range(m):
    if len(minusData) == 0:
      break
    
    if i == 0:
      res.append(abs(minusData[0]) * 2)
    del(minusData[0])

print(sum(res))
profile
공부 리마인드

0개의 댓글