• 생각

끝난 시간이 빠를 수록 다음 시작 시간이 빠르기 때문에 정렬이 필요.

내가 쓴 정렬 방법은 종료시간 정렬 후 종료 시간이 같은 경우에 시작시간에 따라 정렬했다.

 

  • 코드

정답 코드 : 정렬 후 회의실 최대 개수를 구해줌.

 

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

public class Main {
	static int N;
	static int[][] array;

	public static void main(String[] args) throws Exception {
		SetData();
		System.out.println(ReturnMaxMeetingRoom());
	}

	private static void SetData() throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		N = Integer.parseInt(br.readLine());
		array = new int[N][2];	

		for(int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			array[i][0] = Integer.parseInt(st.nextToken());
			array[i][1] = Integer.parseInt(st.nextToken());
		}
		
        Arrays.sort(array, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                int result = o1[1] - o2[1];
                if (result != 0) return o1[1] - o2[1];	//종료시간에 따라 정렬
                return o1[0] - o2[0];		 //만약 비교하는 값의 종료시간이 같을 경우 시작시간으로 정렬
            }
        });
	}
	
    private static int ReturnMaxMeetingRoom()   {
        int count = 0;    // 최대값 변수 
        int temp = -1;    // 다음시작 시간과 비교할 변수
        for (int i = 0; i < N; i++) {
            //현재 시작시간이 이전 종료시간보다 늦을 경우 
            if (array[i][0] >= temp) {
                temp = array[i][1];
                count++;
            }
        }
        return count;
    }
}

'algorithm' 카테고리의 다른 글

[JAVA] 백준 20004번 : 베스킨라빈스 31  (0) 2020.12.07
[JAVA] 백준 14241번 : 슬라임 합치기  (0) 2020.12.07
[JAVA] 백준 11399번 : ATM  (0) 2020.12.04
[JAVA] 백준 3036번 : 링  (0) 2020.12.03
[JAVA] 백준 2089번 : -2진수  (2) 2020.12.03

+ Recent posts