본문 바로가기
알고리즘/그리디

[백준][Python] 1461번 도서관

by 임짠짠 2022. 10. 31.
반응형
 

1461번: 도서관

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

www.acmicpc.net

 

코드

n, m = map(int,input().split())
book = list(map(int,input().split()))
pos = []
neg = []
l = []
for i in book:
	if i > 0:
		pos.append(i)
	else:
		neg.append(abs(i))
pos.sort(reverse=True)
neg.sort(reverse=True)

for i in range(len(pos)):
	if i % m == 0:
		l.append(pos[i])
for i in range(len(neg)):
	if i % m == 0:
		l.append(neg[i])

l.sort()
ans = 2* sum(l) - l[-1]
print(ans)

 

설명

주어진 책의 위치를 음수와 양수로 나눈 뒤 내림차순으로 정렬을 한다. 음수는 나눌 때 절댓값으로 바꿔준다.

리스트의 인덱스 값이 M으로 나누어떨어지면 리스트 l에 넣어준다. 

책을 모두 제자리에 놔둔 후에는 다시 0으로 돌아올 필요가 없기 때문에 l에 들어있는 숫자 중 가장 큰 값을 가장 마지막에 놔둬야 한다.

예를 들어서 2권을 한번에 옮길 수 있고 2, 11에 책을 놔둬야 하는 상황이면

11을 갔다가 2를 들려서 0으로 돌아오는 데 총 11*2 걸음이 필요하다.

따라서 리스트 l에 들어있는 숫자의 합에 2를 곱한 후, 마지막에는 다시 0으로 돌아올 필요가 없으므로 가장 큰 값을 빼준다.

반응형

댓글