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)