728x90
반응형
문제풀이 GitHub
https://github.com/Seokii/baekjoon
문제 링크
https://www.acmicpc.net/problem/1461
풀이
n,m = map(int, input().split())
books = list(map(int, input().split()))
plus=[]
minus=[]
for i in books:
if i > 0: plus.append(i)
else : minus.append(abs(i))
plus.sort(reverse=True)
minus.sort(reverse=True)
count = []
for i in range(len(plus)//m):
count.append(plus[i*m])
if len(plus) % m > 0:
count.append(plus[(len(plus) // m) * m])
for i in range(len(minus)//m):
count.append(minus[i*m])
if len(minus) % m > 0:
count.append(minus[(len(minus) // m) * m])
count.sort()
answer = count.pop()
answer += 2*sum(count)
print(answer)
받은 수를 양수와 음수로 구분하여 리스트에 추가했습니다.
음수는 abs()를 사용해 절댓값을 계산해 양수로 변환 후 리스트에 추가했습니다.
그 후 두 개의 리스트를 내림차순으로 정렬했습니다.
count 리스트를 만들어, 가져갈 수 있는 책의 수만큼 index를 지정해 추가했습니다.
이후 가져갈 수 있는 만큼 보다 더 적은 수의 책이 리스트의 끝쪽에 남아 있는 경우를 생각해, if문으로 처리했습니다.
이후 count리스트를 오름차순으로 정렬하고, 마지막의 값(본래의 위치로 안 돌아와도 되기 때문)만 한 번 더하고 나머지는 2를 곱해 더한 후 출력했습니다.
728x90
반응형
'알고리즘 정복하기! > 백준 문제풀이' 카테고리의 다른 글
백준 11123번 Python / DFS (0) | 2022.03.01 |
---|---|
백준 11501번 Python / Greedy (0) | 2022.02.28 |
백준 15903번 Python / Greedy (0) | 2022.02.25 |
백준 16435번 Python / Greedy (0) | 2022.02.25 |
백준 1343번 Python / Greedy (0) | 2022.02.21 |
댓글