본문 바로가기
Algorithm/JUNGOL

[JUNGOL] 1828. 냉장고 (Java)

by sun_HY 2023. 3. 18.

정올 1828. 냉장고 (자바)

 

JUNGOL

 

www.jungol.co.kr

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());
    }
}

하나씩 입력받으면서 찾으려고 했더니 틀림

입력 받아서 정렬 후 최소값 작은 순서대로 가능한 경우의 수가 있는지 확인하며 진행한다

 

 

728x90

'Algorithm > JUNGOL' 카테고리의 다른 글

[JUNGOL] 568 : 배열2 - 자가진단5 (Java)  (0) 2023.03.05