문제 1461 도서관

Sungmin·2023년 5월 16일
0

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


Solution

n, m = map(int, input().split())
book = list(map(int, input().split()))

left = []
right = []
max_book = 0

for i in book:
    if i < 0:
        left.append(i)
    elif i > 0:
        right.append(i)
    
    if abs(i) > abs(max_book):
        max_book = i

left.sort()
right.sort(reverse = True)

cnt = 0

for i in range(0, len(left), m):
    if left[i] != max_book: 
        cnt += abs(left[i])

for i in range(0, len(right), m):
    if right[i] != max_book:
        cnt += right[i]

cnt *= 2

cnt += abs(max_book)
print(cnt)

배운점

이 문제에서 가장 먼저 알아야 할 점은 음수와 양수를 따로 나누어 계산한다는 점이다.
left에 음수를 넣고, rifhgt에 양수를 넣고 가장 먼 거리를 제외한 좌표부터
책을 놔두고 오면 된다.
책은 최대 m개를 들 수 있으므로 m번째씩 반복하게 만들었다.
1. 음수와 양수를 나눠야 한다
2. 거리가 먼 순서로 정렬해야한다.
3. 예를들어 두 개씩 들수있다면, 두 번씩 건너띄며 반복한다.
4. 갔다가 돌아와야 하므로 *2해준다
5. 마지막으로 가장 먼 거리를 더해준다.

profile
Let's Coding

0개의 댓글