http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1101&sca=30 

 

JUNGOL

 

www.jungol.co.kr

 

문제

N개의 화학 물질 C1, C2, …, Cn이 있다. 

이들 각각은 보관되어야 할 온도가 각기 다른데, 각 Ci마다 최저 보관 온도 xi와 최고 보관 온도 yi가 정해져 있다. 

즉 Ci는 온도 xi이상, yi이하의 온도에서 보관되어야만 안전하다.

 

이 화학 물질들을 모두 보관하기 위해서는 여러 대의 냉장고가 필요한데 가능하면 적은 수의 냉장고를 사용하고 싶다. 

이를 해결하는 프로그램을 작성하시오.

 

입력형식

첫줄에 화학물질의 수 N이 입력된다. N의 범위는 1이상 100 이하이다. 

두 번째 줄부터 N+1줄까지 최저보관온도와 최고보관온도가 입력된다. 

보관온도는 -270° ~ 10000°이며, 각 냉장고는 임의의 정해진 온도를 일정하게 유지할 수 있고, 냉장고는 아주 크다고 가정한다.

 

출력형식

첫줄에 최소로 필요한 냉장고의 대수를 출력한다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class refrigerator {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int N = Integer.parseInt(br.readLine());
		int result = 1;
		int max_x = Integer.MIN_VALUE;
		int min_y = Integer.MAX_VALUE;
		int[][] arr = new int[N][2];
		for (int t = 0; t < N; t++) {
			String str = br.readLine();
			st = new StringTokenizer(str, " ");
			arr[t][0] = Integer.parseInt(st.nextToken());
			arr[t][1] = Integer.parseInt(st.nextToken());
		}
		Arrays.sort(arr, new  Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				if(o1[0]==o2[0]) {
					return o1[1]-o2[1];
				}else {
					return o1[0]-o2[0];
				}
			}
		});
		for (int[] temp : arr) {
			if (max_x > temp[1] || min_y < temp[0]) {
				result++;
				max_x = temp[0];
				min_y = temp[1];
				continue;
			}
			max_x = max_x < temp[0] ? temp[0] : max_x;
			min_y = min_y > temp[1] ? temp[1] : min_y;
		}
		System.out.println(result);
	}
}

 

이중배열 arr를 오름차순 정렬한 뒤

Arrays.sort(arr, new  Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[0]==o2[0]) {
return o1[1]-o2[1];
}else {
return o1[0]-o2[0];
}
}
});

 

현재까지의 수용 가능 범위를 벗어나면 냉장고의 수를 +1 해주고 수용 범위를 변경해 주고,

if (max_x > temp[1] || min_y < temp[0]) {
result++;
max_x = temp[0];
min_y = temp[1];
continue;
}

 

수용 범위를 벗어나지 않으면 수용 범위와 xi, yi를 비교해 수용 범위를 갱신해주는 풀이입니다.

max_x = max_x < temp[0] ? temp[0] : max_x;
min_y = min_y > temp[1] ? temp[1] : min_y;

+ Recent posts