본문 바로가기

알고리즘

[백준][KOTLIN] 1931 회의실 배정

728x90

- https://www.acmicpc.net/problem/1931

 

1931번: 회의실 배정

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

www.acmicpc.net

풀이

1. 회의실 시간 정보를 저장하는 배열을 선언한다.

2. 배열을 종료 시간 기준으로 오름 차순 정렬 한다.

3. 2번의 정렬된 배열을 시작 시간 기준으로 오름 차순 정렬 한다.

4. 검색되는 회의의 종료 시간이 다음 회의의 시작 시간보다 작은 경우를 검색 한다.

코드

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

fun main(args: Array<String>) {
    val br = BufferedReader(InputStreamReader(System.`in`))
    // 회의실 개수
    val N = br.readLine().toInt()
    // 회의실 시작 시간, 종료 시간 정보 저장
    val I = mutableListOf<Pair<Int, Int>>()

    repeat(N) {
        val st = StringTokenizer(br.readLine())
        val start = st.nextToken().toInt()
        val end = st.nextToken().toInt()
        I.add(Pair(start, end))
    }

    // 회의 종료 시간으로 오름 차순 정렬 뒤 회의 시작 시간으로 오름 차순 정렬 한다.
    I.sortWith(compareBy({ it.second}, { it.first }))

    var time = 0
    var result = 0

    for (meeting in I) {
        // 저장된 시간이 회의 시작 시간 보다 작은 회의를 검색한다.
        if (time <= meeting.first) {
            // 시간을 검색된 회의의 종료 시간으로 업데이트 한다.
            // 다음 회의가 이전 회의 종료 시간보다 더 뒤어야 회의를 할 수 있다.
            time = meeting.second
            result++
        }
    }

    println(result)
}
728x90

'알고리즘' 카테고리의 다른 글

[백준][KOTLIN] 1541 잃어버린 괄호  (0) 2021.12.24
[백준][KOTLIN] 11399 ATM  (0) 2021.12.24
[백준][KOTLIN] 11047 동전 0  (0) 2021.12.23
[백준][Kotlin] 12865 평범한 배낭  (0) 2021.12.22
[백준][Kotlin] 1912 연속합  (0) 2021.12.17