728x90
https://www.acmicpc.net/problem/1931
1931번: 회의실 배정
(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.
www.acmicpc.net
문제 풀이
1. 주어지는 입력을 회의 (시작 시간, 종료 시간)을 저장하는 List 를 선언한다.
2. 1번에서 저장된 List 를 종료 시간을 기준으로 오름 차순 정렬 한다. 종료 시간이 같을 경우 시작 시간을 기준으로 오름 차순으로 정렬한다.
3. 결과를 출력하는 result 와 기준이 되는 시간을 저장하는 time 을 선언한다.
4. List 의 크기만큼 For 문을 돌려서 다음의 조건을 확인 한다.
5. list item 의 시작 시간이 time 보다 큰지 확인 한다.
6. 5번 조건에 해당될 경우 time 의 현재 회의 실의 종료 시간을 저장하고 resut 를 증가한다.
7. 4번의 For 을 종료한 뒤 result 를 출력한다.
코드
import java.io.*
fun main(args: Array<String>) {
val br = BufferedReader(InputStreamReader(System.`in`))
val N = br.readLine().toInt()
val meetingRoom = mutableListOf<Pair<Int, Int>>()
repeat(N) {
val (start, end) = br.readLine().split(" ").map { it.toInt() }
meetingRoom.add(Pair(start, end))
}
// 회의 끝나는 시간을 기준으로 오름차순 정렬한다.
// 끝나는 시간이 같을 경우 시작 시간을 기준으로 오름 차순 정렬한다.
meetingRoom.sortWith(compareBy({
it.second
}, {
it.first
}))
//println(meetingRoom)
var result = 0
var time = 0
for (room in meetingRoom) {
val (start, end) = room
// 회의 시작 시간이 저장된 time 보다 크거나 같은 지 확인 한다.
if (time <= start) {
time = end
result++
}
}
println(result)
}
728x90
'알고리즘(w.KOTLIN) > 그리디(Greedy)' 카테고리의 다른 글
[백준][코틀린][1285] 동전 뒤집기 (0) | 2023.05.08 |
---|---|
[백준][코틀린][2138] 전구와 스위치 (0) | 2023.05.02 |
[백준][코틀린][1080] 행렬 (0) | 2023.04.24 |
[백준][코틀린][11399] ATM (0) | 2023.04.22 |
[백준][코틀린][11047] 동전 0 (0) | 2023.04.17 |