Coding Test/beakjoon

[백준/Java] 1931번 - 회의실 배정

굠민 2024. 9. 16. 23:04
문제 & 난이도

  • 그리디 알고리즘
  • 난이도 : 실버 1

 

풀이
import java.util.*;

public class Beakjoon1931 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        //첫째 즐 : 회의의 수 N
        int N = sc.nextInt();
        sc.nextLine();

        //회의를 저장할 배열
        int[][] meetingTimes = new int[N][2];

        //둘째 줄 ~ N+1줄 : 각 회의의 정보 (2^31-1)
        for (int i = 0; i < N; i++) {
            meetingTimes[i][0] = sc.nextInt();
            meetingTimes[i][1] = sc.nextInt();
        }

        //종료 시간 빠른 기준으로 배정하는 알고리즘 사용

        //정렬 : 종료 시간 기준
        Arrays.sort(meetingTimes, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                //종료 시간이 큰(더 늦은) 경우 뒤로 보낸다.
                if(o1[1]> o2[1]) return 1;
                //종료 시간이 더 작은(빠른) 경우 그대로 둔다.
                else if(o1[1]<o2[1]) return -1;
                //종료 시간이 같은 경우
                else{
                    //시작시간이 더 늦으면 뒤로 보내고
                    if(o1[0] > o2[0]) return 1;
                    //시작 시간이 더 빠른 경우 그대로 둔다.
                    else return -1;
                }
            }
        });

        //배정
        int count = 1; //첫 번째 회의는 무조건 선택되기에 초깃값 1로 설정
        int end = meetingTimes[0][1];
        for(int i = 1; i<N; i++){
            //현재 배정된 회의들의 마지막 끝나는 시간보다 크거나 같은 경우
            if(end<=meetingTimes[i][0]){
                count++;
                end = meetingTimes[i][1];
            }
        }
        System.out.println(count);
    }
}

 

 

느낀 점

 

2차원 배열 정렬을 해주는 arrays클래스의 sort메서드를 처음 써봤다.

클래스랑 메서드가 정말 많아서 많이 써보고 기능을 알게 되는 것이 중요한 것 같다.

문제를 단순히 기록하는 용도가 아닌 수시로 블로그를 들어와서 내 코드를 보며 코드 내용을 상기시키자!

 

 

 

 

'Coding Test > beakjoon' 카테고리의 다른 글

[백준/Java] 11000번 - 강의실 배정  (1) 2024.09.17
[백준/Java] 9012번 - 괄호  (0) 2024.09.17
[백준/Java] 2285번 - 우체국  (2) 2024.09.16
[백준/Java] 28278번 - 스택 2  (0) 2024.09.15
[백준/Java] 2164번 - 카드2  (0) 2024.09.15