본문 바로가기

ALGORITHM

백준 1931 회의실 배정 (Java)

1. 문제 링크

 

1931번: 회의실 배정

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

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

처음에는 입력받은 시작 시간과 종료 시간의 차이가 짧은 순으로 정렬을 하려고 했다.

회의 시간이 짧을수록 다른 회의가 더 많이 진행될 수 있다는 생각을 했기 때문이었는데

 

그렇게 하다보니 반복문도 너무 많이 나오고

리스트의 길이가 길어질 때 반복문을 도는 횟수가 훅 훅 늘어났다.

 

그래서 다른 사람의 풀이를 참고했다. 

회의 종료 시간을 기준으로 정렬을 하면 한 회의의 종료시간과 다른 회의의 시작시간을 비교하면 끝이라

간단하게 코드를 짤 수 있었다.

 

4. 코드

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

public class Main {
	static class Meet implements Comparable<Meet>{
		int start;
		int end;
		
		public Meet(int start, int end) {
			this.start = start;
			this.end = end;
		}

		@Override
		public int compareTo(Meet o) {
			if(this.end > o.end) {
				return 1;
			}
			else if(this.end == o.end) { //회의가 시작하자마자 끝나는 경우
				if(this.start > o.start) {
					return 1;
				}
			}
			return -1;
		}
	}
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int count = 0;
		int time = 0;
		String temp;
		String[] temp2;
		ArrayList<Meet> arr = new ArrayList<>();
		
		int N = Integer.parseInt(br.readLine());
		for (int i = 0; i < N; i++) {
			temp = br.readLine();
			temp2 = temp.split(" ");
			int start = Integer.parseInt(temp2[0]);
			int end = Integer.parseInt(temp2[1]);
			arr.add(new Meet(start, end));
		}
		
		Collections.sort(arr);
		
		for(Meet s: arr) {
			if(s.start>=time) {
				count++;
				time = s.end;
			}
		}

		sb.append(count);
		System.out.println(sb);
	}
}

 

'ALGORITHM' 카테고리의 다른 글

백준 8958 OX퀴즈 (Java)  (0) 2023.01.26
백준 1547 공 (Java)  (0) 2023.01.25
백준 5585 거스름돈 (Java)  (0) 2023.01.23
백준 1085 직사각형에서 탈출 (Java)  (0) 2023.01.22
백준 1436 영화감독 숌 (Java)  (0) 2023.01.21