1672번: DNA 해독백준/문제2024. 4. 4. 13:19
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/1672
언어 : Kotlin
문제 설명 :
N개의 A, G, C, T로 구성되어 있는 DNA 염기서열이 있다. 그리고 우리는 이 염기서열을 아래의 표를 이용하여 해독을 해야 한다.
해독 방법은 염기 서열에서 제일 끝에 있는 두 개의 염기를 An-1, An이라 할 때, An-1을 행으로 An을 열로 대응시켜 그에 해당하는 하나의 염기로 바꾸는 방식을 반복하는 것이다. 예를 들어 AAGTCG라는 염기서열이 있다고 하자. 이 서열을 위의 규칙 때로 해독하면 AAGTCG → AAGTT → AAGT → AAA → AA → A 가 되어 최종적으로 해독한 염기는 A가 된다.
문제는 어떤 염기서열이 주어졌을 때 위의 표를 참고하여 해독된 최종 염기를 출력하는 것이다.
입력 :
첫째 줄에 염기 서열의 길이 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 염기서열을 나타내는 길이가 N인 문자열이 주어진다.
출력 :
첫째 줄에 최종 염기를 출력한다.
제한 사항 :
- 시간 제한 : 5초
- 메모리 제한 : 16MB
입출력 예 :
입력 | 출력 |
6 AAGTCG |
A |
풀이 :
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val table = arrayOf(
charArrayOf('A', 'C', 'A', 'G'),
charArrayOf('C', 'G', 'T', 'A'),
charArrayOf('A', 'T', 'C', 'G'),
charArrayOf('G', 'A', 'G', 'T')
)
val n = readLine().toInt()
val str = readLine()
if (n != 1) {
var cur = table[index(str[n - 1])][index(str[n - 2])]
for (i in str.length - 3 downTo 0) {
cur = table[index(cur)][index(str[i])]
}
bw.write("$cur")
bw.flush()
} else {
bw.write(str)
bw.flush()
}
bw.close()
}
fun index(c: Char): Int {
return when(c) {
'A' -> 0
'G' -> 1
'C' -> 2
else -> 3
}
}
'백준 > 문제' 카테고리의 다른 글
11091번: 알파벳 전부 쓰기 (0) | 2024.04.04 |
---|---|
20310번: 타노스 (0) | 2024.04.04 |
1414번: 불우이웃돕기 (0) | 2024.04.03 |
17094번: Serious Problem (0) | 2024.04.03 |
29731번: 2033년 밈 투표 (0) | 2024.04.03 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!