[백준] DNA 해독 (1672)(kotlin)

문제 설명

백준 1672번 문제 링크

입력 및 출력

» 입력

첫째 줄에 염기 서열의 길이 N(1≤N≤1,000,000)이 주어진다. 둘째 줄에는 염기서열을 나타내는 길이가 N인 문자열이 주어진다.

» 출력

첫째 줄에 최종 염기를 출력한다.

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

입력 출력
6
AAGTCG
A

문제 풀이1

import java.io.BufferedReader
import java.io.InputStreamReader

fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))) {
    val table = arrayOf(
        charArrayOf('A', 'C', 'A', 'G'),
        charArrayOf('C', 'G', 'T', 'A'),
        charArrayOf('A', 'T', 'C', 'G'),
        charArrayOf('G', 'A', 'G', 'T')
    )

    var N = readLine().toInt()
    var dna = readLine()
    var prevChar = table[dnaIdx(dna[N - 1])][dnaIdx(dna[N - 2])]

    for (i in dna.length - 3 downTo 0) {
        prevChar = table[dnaIdx(prevChar)][dnaIdx(dna[i])]
    }

    println(prevChar)
}

fun dnaIdx(ch: Char): Int {
    return when(ch) {
        'T' -> 3
        'C' -> 2
        'G' -> 1
        else -> 0
    }
}