Skip to main content

1461 도서관

·128 words·1 min· loading

https://www.acmicpc.net/problem/1461

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

쉬운문제였는데 생각이 너무많아서 어렵게풀었다.

먼져, 음수와 양수를 각각 리스트에넣고 음수는 abs해준다. 이를 거꾸로 정렬한다.

그 후, 각각 길이//m, 길이%m을 구한다. (a,b)

a만큼 반복문을 돌면서 (a-1까지)

각 배열[i*m](그 범위에서의 최댓값) 의 2배(왕복) 정답에 더해주다

만약 b가 있다면,

더 처리할 원소가 있으므로

위 결과에 [i*m](나머지 중 가장 큰 수)*2를 더해준다

그리고, 음수와 양수에서 가장 큰 수가 최댓값인데,

이 최댓값을 왕복하지 않아야하므로

정답에서 최댓값을 빼주면 된다.

써놓고보면 간단한데 웰케 헷갈리는지 모르겠다.

n,m= map(int,input().split())arr=[*map(int,input().split())]plus,minus=[],[]
for a in arr:    if a>0:        plus.append(a)    else:
        minus.append(abs(a))plus.sort(reverse=True)minus.sort(reverse=True)
answer=0max_val=0for ttt in (plus,minus):    if ttt:
        a,b=divmod(len(ttt),m)        for i in range(a):
            answer+=ttt[i*m]*2        if ttt:tmp=ttt[0]        if b:
            answer+=ttt[a*m]*2        max_val=max(max_val,tmp)
print(answer-max_val)