Skip to content

Commit 7b48f31

Browse files
[Gold IV] Title: 도서관, Time: 112 ms, Memory: 14244 KB -BaekjoonHub
1 parent 06ec734 commit 7b48f31

2 files changed

Lines changed: 65 additions & 0 deletions

File tree

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# [Gold IV] 도서관 - 1461
2+
3+
[문제 링크](https://www.acmicpc.net/problem/1461)
4+
5+
### 성능 요약
6+
7+
메모리: 14244 KB, 시간: 112 ms
8+
9+
### 분류
10+
11+
그리디 알고리즘, 정렬
12+
13+
### 제출 일자
14+
15+
2024년 11월 25일 19:37:56
16+
17+
### 문제 설명
18+
19+
<p>세준이는 도서관에서 일한다. 도서관의 개방시간이 끝나서 세준이는 사람들이 마구 놓은 책을 다시 가져다 놓아야 한다. 세준이는 현재 0에 있고, 사람들이 마구 놓은 책도 전부 0에 있다. 각 책들의 원래 위치가 주어질 때, 책을 모두 제자리에 놔둘 때 드는 최소 걸음 수를 계산하는 프로그램을 작성하시오. 세준이는 한 걸음에 좌표 1칸씩 가며, 책의 원래 위치는 정수 좌표이다. 책을 모두 제자리에 놔둔 후에는 다시 0으로 돌아올 필요는 없다. 그리고 세준이는 한 번에 최대 M권의 책을 들 수 있다.</p>
20+
21+
### 입력
22+
23+
<p>첫째 줄에 책의 개수 N과, 세준이가 한 번에 들 수 있는 책의 개수 M이 주어진다. 둘째 줄에는 책의 위치가 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 책의 위치는 0이 아니며, 절댓값은 10,000보다 작거나 같은 정수이다.</p>
24+
25+
### 출력
26+
27+
<p>첫째 줄에 정답을 출력한다.</p>
28+
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.*;
5+
6+
public class Main {
7+
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
9+
public static void main(String[] args) throws IOException {
10+
String[] info = br.readLine().split(" ");
11+
int n = Integer.parseInt(info[0]);
12+
int m = Integer.parseInt(info[1]);
13+
List<Integer> negativeNode = new ArrayList<>();
14+
List<Integer> positiveNode = new ArrayList<>();
15+
String[] nodes = br.readLine().split(" ");
16+
for (int i = 0; i < n; i++) {
17+
int num = Integer.parseInt(nodes[i]);
18+
if (num > 0) positiveNode.add(num);
19+
else negativeNode.add(Math.abs(num));
20+
}
21+
negativeNode.sort(Collections.reverseOrder());
22+
positiveNode.sort(Collections.reverseOrder());
23+
24+
int totalDistance = 0;
25+
for (int i = 0; i < negativeNode.size(); i += m) {
26+
totalDistance += negativeNode.get(i) * 2;
27+
}
28+
for (int i = 0; i < positiveNode.size(); i += m) {
29+
totalDistance += positiveNode.get(i) * 2;
30+
}
31+
32+
int maxDistance = 0;
33+
if (!negativeNode.isEmpty()) maxDistance = Math.max(maxDistance, negativeNode.get(0));
34+
if (!positiveNode.isEmpty()) maxDistance = Math.max(maxDistance, positiveNode.get(0));
35+
System.out.println(totalDistance - maxDistance);
36+
}
37+
}

0 commit comments

Comments
 (0)