[백준] 찍기 (2966)(kotlin)

문제 설명

백준 2966번 문제 링크

입력 및 출력

» 입력

  • 첫째 줄에 필기시험의 문제의 수 N이 주어진다. (1 ≤ N ≤ 100) 둘째 줄에는 시험의 정답이 주어진다.

» 출력

  • 첫째 줄에 가장 많은 문제를 맞춘 사람이 몇 문제를 맞혔는지 출력한다. 다음 줄에는 가장 많은 문제를 맞힌 사람의 아이디를 출력한다. 상근이의 아이디는 Adrian, 창영이의 아이디는 Bruno, 현진이의 아이디는 Goran이다. 아이디 여러 개를 출력하는 경우에는 상근이, 창영이, 현진이 순서로 출력하고, 한 줄에 하나씩 출력한다.

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

입력 출력
5
BAACC
3
Bruno
9
AAAABBBBB
4
Adrian
Bruno
Goran

문제 풀이1

import java.util.LinkedList

fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    val sg = LinkedList<String>()
    sg.add("A"); sg.add("B"); sg.add("C")
    val cy = LinkedList<String>()
    cy.add("B"); cy.add("A"); cy.add("B"); cy.add("C")
    val hj = LinkedList<String>()
    hj.add("C"); hj.add("C"); hj.add("A"); hj.add("A"); hj.add("B"); hj.add("B")

    val N = readLine().toInt()
    val problem = readLine()
    val map = mutableMapOf<String, Int>()
    map["Adrian"] = 0
    map["Bruno"] = 0
    map["Goran"] = 0

    //ABC
    //BABC
    //CCAABB
    for (i in 0 until N) {
        val adrian = sg.poll()
        if (problem[i].toString() == adrian)
            map["Adrian"] = map["Adrian"]!! + 1
        sg.add(adrian)

        val bruno = cy.poll()
        if (problem[i].toString() == bruno)
            map["Bruno"] = map["Bruno"]!! + 1
        cy.add(bruno)

        val goran = hj.poll()
        if (problem[i].toString() == goran)
            map["Goran"] = map["Goran"]!! + 1
        hj.add(goran)
    }

    val max = map.values.maxByOrNull { v -> v }
    println(max)

    map.filterValues { it == max }.keys.toMutableList().sorted().forEach { println(it) }

}