[백준] 회장뽑기 (2660)(kotlin)

문제 설명

백준 2660번 문제 링크

입력 및 출력

» 입력

입력의 첫째 줄에는 회원의 수가 있다. 단, 회원의 수는 50명을 넘지 않는다. 둘째 줄 이후로는 한 줄에 두 개의 회원번호가 있는데, 이것은 두 회원이 서로 친구임을 나타낸다. 회원번호는 1부터 회원의 수만큼 붙어 있다. 마지막 줄에는 -1이 두 개 들어있다.

» 출력

첫째 줄에는 회장 후보의 점수와 후보의 수를 출력하고, 두 번째 줄에는 회장 후보를 오름차순으로 모두 출력한다.

예제 입출력(테스트케이스)

입력 출력
5
1 2
2 3
3 4
4 5
2 4
5 3
-1 -1
2 3
2 3 4

문제 풀이1

풀이 참고

fun main() = with(System.`in`.bufferedReader()) {
    val n = readLine().toInt()
    val matrix = Array(n) { IntArray(n) { 10_000_000 } }

    while (true) {
        val (a, b) = readLine().split(" ").map { it.toInt() }
        if (a == -1 && a == b) break

        matrix[a - 1][b - 1] = 1
        matrix[b - 1][a - 1] = 1
    }

    for (k in 0 until n) {
        matrix[k][k] = 0

        for (i in 0 until n) {
            for (j in 0 until n) {
                if (matrix[i][j] > matrix[i][k] + matrix[k][j]) {
                    matrix[i][j] = matrix[i][k] + matrix[k][j]
                }
            }
        }
    }

    val scores = IntArray(n) { i -> matrix[i].maxOf { it } }
    val min = scores.minOf { it }
    val counts = scores.count { it == min }
    println("$min $counts")
    for (i in scores.indices) {
        if (scores[i] == min) {
            print("${i + 1} ")
        }
    }
}