[백준] DNA (1969)(kotlin)

문제 설명

백준 1969번 문제 링크

입력 및 출력

» 입력

첫 줄에 DNA의 수 N과 문자열의 길이 M이 주어진다. 그리고 둘째 줄부터 N+1번째 줄까지 N개의 DNA가 주어진다. N은 1,000보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다.

» 출력

첫째 줄에 Hamming Distance의 합이 가장 작은 DNA 를 출력하고, 둘째 줄에는 그 Hamming Distance의 합을 출력하시오. 그러한 DNA가 여러 개 있을 때에는 사전순으로 가장 앞서는 것을 출력한다.

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

입력 출력
5 8
TATGATAC
TAAGCTAC
AAAGATCC
TGAGATAC
TAAGATGT
TAAGATAC
7
4 10
ACGTACGTAC
CCGTACGTAG
GCGTACGTAT
TCGTACGTAA
ACGTACGTAA
6
6 10
ATGTTACCAT
AAGTTACGAT
AACAAAGCAA
AAGTTACCTT
AAGTTACCAA
TACTTACCAA
AAGTTACCAA
12

문제 풀이1

fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    val (N, M) = readLine().split(" ").map { it.toInt() }
    val dna = Array(N) { readLine() }

    var count = 0
    var result = ""

    for (i in 0 until M) {
        var acgt = IntArray(4) { 0 }
        for (j in 0 until N) {
            when (dna[j][i]) {
                'A' -> acgt[0]++
                'C' -> acgt[1]++
                'G' -> acgt[2]++
                else -> acgt[3]++
            }
        }

        var max = acgt.maxOf { it }
        var index = acgt.indexOf(max)

        result += when (index) {
            0 -> 'A'
            1 -> 'C'
            2 -> 'G'
            else -> 'T'
        }
    }

    for (i in 0 until N) {
        for (j in 0 until M) {
            if (result[j] != dna[i][j]) {
                count++
            }
        }
    }

    println(result)
    println(count)
}