본문 바로가기

알고리즘(w.KOTLIN)/그리디(Greedy)

[백준][코틀린][1931] 회의실 배정

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