[백준] DNA (1969)(kotlin)
문제 설명
입력 및 출력
» 입력
첫 줄에 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)
}