반응형
- 알고리즘 분류 : 구현, 그리디
- 사용 언어 : JAVA
소스 설명은 주석을 참고해주세요.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
ArrayList<Integer> bookArrUp = new ArrayList<>();
ArrayList<Integer> bookArrDown = new ArrayList<>();
st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++) {
int num = Integer.parseInt(st.nextToken());
if(num > 0)
bookArrUp.add(num);
else
bookArrDown.add(Math.abs(num));
}
// 내림차순 정렬
Collections.sort(bookArrUp, Collections.reverseOrder());
Collections.sort(bookArrDown, Collections.reverseOrder());
// 마지막 책을 제자리에 둔 후에는 0으로 되돌아올 필요가 없으니 가장 긴 거리를 minus 변수에 기록
int minus = 0;
if(bookArrUp.size() == 0) {
minus = bookArrDown.get(0);
}
else if(bookArrDown.size() == 0) {
minus = bookArrUp.get(0);
}
else {
if(bookArrUp.get(0) > bookArrDown.get(0)) {
minus = bookArrUp.get(0);
}
else {
minus = bookArrDown.get(0);
}
}
int have = 0; // 가지고 있는 책의 갯수
int distance = 0; // 움직인 거리
int num = 0;
while(!bookArrUp.isEmpty()) {
num = bookArrUp.get(0);
if(have == 0 || bookArrUp.isEmpty()) {
distance += (num*2);
have = 0;
}
bookArrUp.remove(0);
have++;
if(have == M) {
have = 0;
}
}
have = 0;
while(!bookArrDown.isEmpty()) {
num = bookArrDown.get(0);
if(have == 0 || bookArrDown.isEmpty()) {
distance += (num*2);
have = 0;
}
bookArrDown.remove(0);
have++;
if(have == M) {
have = 0;
}
}
distance -= minus;
System.out.println(distance);
}
}
반응형
'Algorithm' 카테고리의 다른 글
[BAEKJOON] 2251번 : 물통 (JAVA) (0) | 2023.03.21 |
---|---|
[BAEKJOON] 2211번 : 네트워크 복구 (JAVA) (0) | 2023.03.12 |
[BAEKJOON] 1041번 : 주사위 (JAVA) (0) | 2023.02.19 |
[BAEKJOON] 12904번 : A와 B (JAVA) (0) | 2023.02.12 |
[Programmers] 개인정보 수집 유효기간 (Java) (0) | 2023.02.05 |