1. 문제 링크
2. 문제 및 입출력예제
3. 문제 풀이
1. 책의 위치를 입력받으면서 양수인 경우와 음수인 경우를 따로 저장한다.
2. 양수와 음수 리스트를 정렬한다.
3. go 를 이용해서 거리를 구한다.
3-1. 양수, 음수 따로 한다.
3-2. 한 번에 갈 수 있는 M번째마다 이동하는 거리의 2배를 더한다. (갔다 왔다)
4. 위치 중 가장 멀리있는 값을 마지막으로 가기 때문에 결과에서 뺀다.
4. 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
static int M, result;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] split = br.readLine().split(" ");
int N = Integer.parseInt(split[0]); //책의 개수
M = Integer.parseInt(split[1]); //한 번에 들 수 있는 개수
split = br.readLine().split(" ");
//양수, 음수 따로 진행
ArrayList<Integer> positive = new ArrayList<>();
ArrayList<Integer> negative = new ArrayList<>();
int temp;
for(int i=0;i<N;i++) {
temp = Integer.parseInt(split[i]);
if(temp < 0) {
negative.add(temp);
}
else {
positive.add(temp);
}
}
Collections.sort(positive);
Collections.sort(negative, Collections.reverseOrder());
int ne = 0;
int po = 0;
if(negative.size()!=0) {
ne = Math.abs(negative.get(negative.size()-1));
}
if(positive.size()!=0) {
po = Math.abs(positive.get(positive.size()-1));
}
//가장 먼 거리는 마지막에 가면 되니까 빼려고
temp = po>ne?po:ne;
result = 0;
go(positive);
go(negative);
System.out.println(result-temp);
}
private static void go(ArrayList<Integer> list) {
for(int i = list.size()-1; i>=0;i-=M) {
result += Math.abs(list.get(i))*2;
}
}
}
'ALGORITHM' 카테고리의 다른 글
백준 5052 전화번호 목록 (Java) (0) | 2023.06.07 |
---|---|
백준 1303 전쟁 - 전투 (Java) (0) | 2023.06.06 |
백준 11724 연결 요소의 개수 (Java) (0) | 2023.06.04 |
백준 1459 걷기 (Java) (0) | 2023.06.03 |
백준 2529 부등호 (Java) (0) | 2023.06.02 |