정올 1828. 냉장고 (자바)
N개의 화학 물질 C1, C2, …, Cn이 있다.
이들 각각은 보관되어야 할 온도가 각기 다른데, 각 Ci마다 최저 보관 온도 xi와 최고 보관 온도 yi가 정해져 있다.
즉 Ci는 온도 xi이상, yi이하의 온도에서 보관되어야만 안전하다.
이 화학 물질들을 모두 보관하기 위해서는 여러 대의 냉장고가 필요한데 가능하면 적은 수의 냉장고를 사용하고 싶다.
이를 해결하는 프로그램을 작성하시오.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class J1828 {
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());
// 가능한 경우의 수 모두 받아서 저장 후 정렬 (최소값 작은 것부터)
ArrayList<int[]> arr = new ArrayList<>();
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
arr.add(new int[] {a, b});
}
Collections.sort(arr, (a, b) -> a[0] - b[0]);
ArrayList<int[]> cnt = new ArrayList<>();
// 첫 값을 첫 번째 냉장고로 지정
// 이전 냉장고로 수납 가능하면 최소값, 최대값 조정 후 패스
// 가능한 냉장고가 없으면 현재 값으로 추가
cnt.add(new int[] {arr.get(0)[0], arr.get(0)[1]});
for (int i = 1; i < N; i++) {
int[] cur = arr.get(i);
int min = cur[0];
int max = cur[1];
boolean t = false;
for (int[] now : cnt) {
if ((min >= now[0] && min <= now[1]) || (max <= now[1] && max >= now[0])) {
t = true;
now[0] = Math.max(min, now[0]);
now[1] = Math.min(max, now[1]);
break;
}
}
if (!t) cnt.add(new int[] {min, max});
}
// 답은 마지막까지 생성된 모든 냉장고의 수
System.out.println(cnt.size());
}
}
하나씩 입력받으면서 찾으려고 했더니 틀림
입력 받아서 정렬 후 최소값 작은 순서대로 가능한 경우의 수가 있는지 확인하며 진행한다
'Algorithm > JUNGOL' 카테고리의 다른 글
[JUNGOL] 568 : 배열2 - 자가진단5 (Java) (0) | 2023.03.05 |
---|