[BOJ] 11377 열혈강호 3 - P3

TaeGN·2024년 9월 11일

BOJ Platinum Challenge

목록 보기
70/114

문제풀이

  1. N명과 M개의 직업을 이분 매칭한 결과를 기록하고, 다시 한번 이분 매칭을 해서 최대 K번을 더 추가한다.

주의사항


소요시간

5분


package 백준.Platinum.P3.p11377_열혈강호3

const val EMPTY = -1
fun main() {
    val (N, M, K) = readln().split(" ").map(String::toInt)
    val matrix = Array(N) { readln().split(" ").map(String::toInt) }
    val idArr = IntArray(M + 1) { EMPTY }
    val visited = BooleanArray(M + 1)
    fun dfs(id: Int): Boolean {
        for (i in 1 until matrix[id].size) {
            val job = matrix[id][i]
            if (visited[job]) continue
            visited[job] = true
            if (idArr[job] == EMPTY || dfs(idArr[job])) {
                idArr[job] = id
                return true
            }
        }
        return false
    }

    var count = 0
    for (i in 0 until N) {
        if (dfs(i)) count++
        visited.fill(false)
    }
    var k = 0
    for (i in 0 until N) {
        if (dfs(i)) k++
        if (k == K) break
        visited.fill(false)
    }
    println(count + k)
}

https://github.com/TaeGN/Algorithm/blob/master/src/%EB%B0%B1%EC%A4%80/Platinum/P3/p11377_%EC%97%B4%ED%98%88%EA%B0%95%ED%98%B83/p11377_%EC%97%B4%ED%98%88%EA%B0%95%ED%98%B83.kt


문제링크

https://www.acmicpc.net/problem/11377

0개의 댓글