본문 바로가기
백준/그리디

백준 1931. 회의실 배정

by 29살아저씨 2021. 8. 17.
반응형

🅰 백준 1931. 회의실 배정

 

1931번: 회의실 배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net

✏️ 문제 풀이

  • 회의실 배정은 종료시간이 빠른 순서대로 처리를 해야한다.
  • 종료시간 기준으로 오름차순을 정렬하고, 종료시간이 같으면 시작시간 기준으로 오름차순을 정렬하였다.

✏️ 소스코드

package greedy;

import java.util.*;
import java.io.*;

public class Main_실버2_1931_손은성 {
	private static int conference[][];
	private static int minEndTime = Integer.MIN_VALUE;
	private static int cnt;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		conference = new int[N][2];
		// 회의실 데이터 입력
		for (int i = 0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			conference[i][0] = Integer.parseInt(st.nextToken());
			conference[i][1] = Integer.parseInt(st.nextToken());
		}

		/* 2차원 배열 end시간 기준으로 오름차순으로 정렬
		 * end시간이 같으면 start시간 기준으로 오름차순 정렬
		 * */
		Arrays.sort(conference, (o1, o2) -> {
			if (o1[1] == o2[1]) {
				return Integer.compare(o1[0], o2[0]);
			} else
				return Integer.compare(o1[1], o2[1]);
		});

		checkedSchedule(N);
		System.out.println(cnt);
	}

	// 최적의 해 구하는 함수
	private static void checkedSchedule(int N) {
		for (int i = 0; i < N; i++) {
			// 회의 시작 시간이 이전 회의 종료시간보다 빠르면 continue
			if (conference[i][0] < minEndTime)
				continue;
			else {
				minEndTime = conference[i][1];
				cnt++;
			}
		}
	}
}

 

✅ 후기

  • 2차원 배열을 정렬하는법을 몰랐는데 이 문제를 통해 알게되었다. 나중에 다시한번 블로그에 정리 해야겠다.
반응형

'백준 > 그리디' 카테고리의 다른 글

백준 1744. 수 묶기  (0) 2021.08.17
백준 1541. 잃어버린 괄호  (0) 2021.08.17
백준 11399. ATM  (0) 2021.08.17
백준 11047. 동전  (0) 2021.08.17
백준 10610. 30 / 배수판정법  (0) 2021.08.13

댓글