본문 바로가기

ALGORITHM

백준 1461 도서관 (Java)

1. 문제 링크

 

1461번: 도서관

세준이는 도서관에서 일한다. 도서관의 개방시간이 끝나서 세준이는 사람들이 마구 놓은 책을 다시 가져다 놓아야 한다. 세준이는 현재 0에 있고, 사람들이 마구 놓은 책도 전부 0에 있다. 각 책

www.acmicpc.net

 

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