문제 링크
1931번: 회의실 배정
(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.
www.acmicpc.net

문제 해설
무엇을 기준으로 정렬을 할지 생각해봐야 할 문제다.
회의 시작 시간을 기준으로 정렬하면 (1, 4), (2, 3), (3, 8) 같은 경우엔 최대 2개의 회의를 할 수 있지만 정렬 기준으로 보면 1개의 회의밖에 진행할 수 없다. 그러므로 회의가 끝나는 시간을 기준으로 오름차순 정렬한다. 만약 끝나는 시간이 같은 회의가 같다면 시작하는 시간이 빠른 순서로 정렬한다. 시작 시간을 정렬하지 않으면 회의 시작 시간과 끝 시간이 같은 회의를 카운팅하지 못하는 경우가 생긴다. 예를 들어, (1, 2), (3, 3), (2, 3)이 있을 때 이 순서로 카운팅하면 (2, 3)을 세지 못한다.
정렬을 한 이후에는 모든 회의를 순회하면서 회의 시작 시간이 현재 시간 이후인 경우에 카운트를 1 증가시키고 현재 시간을 회의 종료시간으로 세팅하는 과정을 반복한다.
Code
import java.util.StringTokenizer fun main() = with(System.`in`.bufferedReader()) { val meetings = Array(readLine().toInt()) { StringTokenizer(readLine()).let { Meeting(it.nextToken().toInt(), it.nextToken().toInt()) } }.sortedArray() var cnt = 0 var cur = 0 for (room in meetings) { if (room.start >= cur) { cnt++ cur = room.end } } println(cnt) } class Meeting(var start: Int, var end: Int) : Comparable<Meeting> { override fun compareTo(other: Meeting) = if (this.end == other.end) this.start - other.start else this.end - other.end }
'Algorithm > BOJ' 카테고리의 다른 글
[Kotlin] 백준 15595 : 정답 비율 계산하기 (0) | 2022.12.10 |
---|---|
[Kotlin] 백준 1270 : 전쟁 - 땅따먹기 (0) | 2022.12.09 |
[Kotlin] 백준 2630 : 색종이 만들기 (0) | 2022.12.08 |
[Kotlin] 백준 11866 : 요세푸스 문제 0 (1) | 2022.12.08 |
[Kotlin] 백준 2563 : 색종이 (0) | 2022.12.07 |
댓글