본문 바로가기
  • 개발하는 곰돌이
Algorithm/BOJ

[Kotlin] 백준 11637 : 인기 투표

by 개발하는 곰돌이 2023. 2. 8.

문제 링크

 

11637번: 인기 투표

각 테스트 케이스는 첫 번째 줄부터 순서대로 출력된다. 최다 득표자가 과반수 득표를 했을경우에는 "majority winner R", 절반 이하의 득표를 하였을 경우엔 "minority winner R"가 되며, 최다 득표자가 없

www.acmicpc.net



문제 해설

간단한 구현 문제이다. 각 테스트 케이스마다 매 입력으로 주어지는 득표 수 중 최대치와 득표 수의 합계를 구한다. 최대 득표 수의 개수가 1이 아니면(= 최다 득표자가 2명 이상이면) "no winner"를 출력한다. 최대 득표 수의 개수가 1이라면 득표 수의 합계를 2로 나눈 값과 최대 득표 수를 비교하여 "majority winner R" 또는 "minority winner R"를 출력한다.


Code

fun main() = with(System.`in`.bufferedReader()) {
    val bw = System.out.bufferedWriter()
    repeat(readLine().toInt()) {
        var max = 0
        var sum = 0
        val candidates = IntArray(readLine().toInt()) {
            readLine().toInt().also { n ->
                max = maxOf(max, n)
                sum += n
            }
        }
        when (candidates.count { it == max }) {
            1 -> bw.write("${if (max > sum / 2) "majority" else "minority"} winner ${candidates.indexOf(max) + 1}\n")
            else -> bw.write("no winner\n")
        }
    }
    bw.close()
}

댓글