코드굽는 타자기

Jungol[1828] - 냉장고 본문

알고리즘/탐욕법(Greedy)

Jungol[1828] - 냉장고

bright-jun 2020. 2. 12. 13:56

링크

 

 

JUNGOL | 냉장고 > 문제은행

N개의 화학 물질 C1, C2, …, Cn이 있다.  이들 각각은 보관되어야 할 온도가 각기 다른데, 각 Ci마다 최저 보관 온도 xi와 최고 보관 온도 yi가 정해져 있다.  즉 Ci는 온도 xi이상, yi이하의 온도에서 보관되어야만 안전하다. 이 화학 물질들을 모두 보관하기 위해서는 여러 대의 냉장고가 필요한데 가능하면 적은 수의 냉장고를 사용하고 싶다.  이를 해결하는 프로그램을 작성하시오.

jungol.co.kr

문제설명

  • 그리디

문제풀이

  • 그리디

문제코드

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Main1828 {
    public static void main(String[] args) throws NumberFormatException, IOException {
        System.setIn(new FileInputStream("res/jungol/1828.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int N = Integer.parseInt(br.readLine());
        int[][] m= new int[N][2];

        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            m[i][0] = Integer.parseInt(st.nextToken());
            m[i][1] = Integer.parseInt(st.nextToken());
        }


        Arrays.sort(m, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                // TODO Auto-generated method stub
                if(o1[0] > o2[0])
                    return 1;
                else if (o1[0] == o2[0])
                    return 0;
                return -1;
            }
        });

        int max_temp=Integer.MIN_VALUE;
        int ans=0;
        for (int i = 0; i < N; i++) {
            if(m[i][1] <= max_temp) {    //냉장고 포함 가능
                max_temp=m[i][1];
            }
            else {
                if(m[i][0] <= max_temp) {    //냉장고 포함 가능

                }
                else {    //냉장고 포함 불가능
                    ans++;
                    max_temp=m[i][1];
                }
            }
        }
        System.out.println(ans);
    }
}

아쉬운점

  • 처음에 온도를 범위로 index만들어서 포함하는 물건의 갯수가 가장 높은 온도를 정하고 pop하고 반복하는 방법
    • 구현해보려다가 복잡했음. 시간초과났을수도
    • 정렬하는 생각을 못했음.
  • Comparator 쓰는 방법 몰라서 2차원배열 정렬 못했음
    • Overriding시, 1일 때 swap, 0일 때 그대로, -1일 때 그대로

잘한점

  • 정렬 후->최선을 찾는다는 생각함.
  • 최선의 온도를 찾는다 -> 나머지 가능한것들 중 최선의 온도를 찾는다.

'알고리즘 > 탐욕법(Greedy)' 카테고리의 다른 글

Baekjoon[1931] - 회의실배정  (0) 2020.02.17
Baekjoon[3109] - 빵집  (0) 2020.02.14
SWEA[4408] - 자기 방으로 돌아가기 [D4]  (0) 2020.02.13
Comments