2024. 5. 20. 16:31ㆍIT/BaekJoon
문제 링크
https://www.acmicpc.net/problem/1672
문제
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인 문자열이 주어진다.
출력
첫째 줄에 최종 염기를 출력한다.
통과한 답안
namespace _1672
{
internal class Program
{
static void Main(string[] args)
{
int N = int.Parse(Console.ReadLine());
string DNASequence = Console.ReadLine();
char[,] decodeTable =
{
{ 'A', 'C', 'A', 'G' },
{ 'C', 'G', 'T', 'A' },
{ 'A', 'T', 'C', 'G' },
{ 'G', 'A', 'G', 'T' }
};
char result = DNASequence[N - 1];
for (int i = N - 2; i >= 0; i--)
{
char first = DNASequence[i];
char second = result;
int row = GetIdx(first);
int col = GetIdx(second);
result = decodeTable[row, col];
}
Console.WriteLine(result);
}
static int GetIdx(char nucleotide)
{
switch (nucleotide)
{
case 'A': return 0;
case 'G': return 1;
case 'C': return 2;
case 'T': return 3;
default: return 99;
}
}
}
}
염기서열의 마지막과 그 앞의 두 글자를 이용하여 하나의 새로운 염기를 만들어서
최종적으로 하나의 염기를 남기는 프로세스를 만드는 문제이다.
주어진 해독표를 char[,]로 저장한 뒤에
두 글자의 인덱스를 이용하여 해당하는 염기를 도출할 수 있도록 만든 후에
한 글자의 염기가 만들어질 때까지 반복하게 작성하였다.
많은 경우의 수가 있을 수 있지만,
이를 2차원 배열과 인덱스 2개(row, col)을 이용하여
모든 경우의 수를 선언하는 것이 아닌 표를 이용하는 방식으로 작성하였다.
'IT > BaekJoon' 카테고리의 다른 글
[BAEKJOON] 백준 1855: 암호 (C#) (0) | 2024.05.21 |
---|---|
[BAEKJOON] 백준 1268: 임시 반장 정하기 (C#) (0) | 2024.05.21 |
[BAEKJOON] 백준 1357: 세준세비 (C#) (0) | 2024.05.20 |
[BAEKJOON] 백준 1357: 뒤집힌 덧셈 (C#) (0) | 2024.05.20 |
[BAEKJOON] 백준 1356: 유진수 (C#) (0) | 2024.05.19 |