728x90
반응형
https://www.acmicpc.net/problem/1461
문제
세준이는 도서관에서 일한다. 도서관의 개방시간이 끝나서 세준이는 사람들이 마구 놓은 책을 다시 가져다 놓아야 한다. 세준이는 현재 0에 있고, 사람들이 마구 놓은 책도 전부 0에 있다. 각 책들의 원래 위치가 주어질 때, 책을 모두 제자리에 놔둘 때 드는 최소 걸음 수를 계산하는 프로그램을 작성하시오. 세준이는 한 걸음에 좌표 1칸씩 가며, 책의 원래 위치는 정수 좌표이다. 책을 모두 제자리에 놔둔 후에는 다시 0으로 돌아올 필요는 없다. 그리고 세준이는 한 번에 최대 M권의 책을 들 수 있다.
입력
첫째 줄에 책의 개수 N과, 세준이가 한 번에 들 수 있는 책의 개수 M이 주어진다. 둘째 줄에는 책의 위치가 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 책의 위치는 0이 아니며, 절댓값은 10,000보다 작거나 같은 정수이다.
출력
첫째 줄에 정답을 출력한다.
풀이
Code
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
array = list(map(int, input().split()))
ans = 0
# 1. 책의 원래 위치 양수, 음수별로 분리
minus = sorted([num for num in array if num < 0])
plus = sorted([num for num in array if num > 0], reverse = True)
# 2. 가장 먼 거리(왕복하지 않을 경우) 체크
try :not_return = minus[0] if abs(minus[0]) > plus[0] else plus[0]
except : not_return = minus[0] if not plus else plus[0]
# 3. 음수 리스트 처리
for i in range(0, len(minus), m) :
# 돌아가지 않는 경우 체크
if minus[i] == not_return : continue
# 이외의 경우 체크
ans += 2 * abs(minus[i])
# 4. 양수 리스트 처리
for i in range(0, len(plus), m) :
# 돌아가지 않는 경우 체크
if plus[i] == not_return : continue
# 이외의 경우 체크
ans += 2 * plus[i]
# 5. 왕복하지 않는 경우 처리
ans += abs(not_return)
# 6. 결과 출력
print(ans)
728x90
반응형
'Coding Test > Baekjoon' 카테고리의 다른 글
[Python/BOJ] 2212. 센서 (0) | 2023.07.08 |
---|---|
[Python/BOJ] 9251. LCS (0) | 2023.06.30 |
[Python/BOJ] 13164. 행복 유치원 (0) | 2023.06.24 |
[Python/BOJ] 1747. 소수&팰린드롬 (0) | 2023.06.21 |
[Python/BOJ] 1520. 내리막 길 (0) | 2023.06.19 |