문제
https://www.acmicpc.net/problem/1672
내가 작성한 코드
N = int(input())
text = list(input())
dna = {"AA" : "A", "AG" : "C", "AC" : "A", "AT" : "G", "GA" : "C","GG" : "G",
"GC" : "T", "GT" : "A", "CA" : "A", "CG" : "T", "CC" : "C", "CT" : "G",
"TA" : "G", "TG" : "A", "TC" : "G","TT" : "T"}
while True:
if len(text) == 1:
break
case = text[-2] + text[-1]
result = dna.get(case)
del text[-2:]
text.append(result)
print(text[0])
입력받아야 하는게 문자열의 길이랑, 문자열 이렇게 2개였다
그리고 행+열의 조합에 대응하는 각각의 염기가 표로 정리되어 있었는데 이걸 딕셔너리 형태로 저장해두었다
key, value로 찾는 거랄까
그리고 문자열이 1의 길이를 가질 때까지 반복해야 하니 for문 보다는 while문을 돌리기로 했다
if 문을 통해 문자열의 길이가 1이 되는 순간 break하도록 해주었고
그 외의 경우는 뒤의 두 문자를 조합해 탐색 대상인 문자열을 만들도록 해주었다
그 결과를 dna 딕셔너리에서 찾아서 대응하도록 했다
그 후 뒤의 2개를 삭제한 후 list에 append로 넣어주면 맨 뒤에 결과 염기가 추가되므로
이 과정을 반복해 최종 염기를 결정지을 수 있다.
(물론 지금은 잘못된 염기가 들어오지 않는다는 가정 하에 코드를 작성한 것이지만
만약 잘못된 염기가 들어올 수 있다는 조건이 붙는다면 while문 내에 case가 dna 딕셔너리에 존재할 경우?
라는 조건문을 하나 추가해줘야 할 듯하다)
'파이썬 > 백준' 카테고리의 다른 글
| [백준 1834] 나머지와 몫이 같은 수 (5) | 2024.07.24 |
|---|---|
| [백준 10869] 사칙연산 (0) | 2024.01.12 |
| [백준 2557] Hello World (0) | 2024.01.12 |
| [백준 1008] A/B (0) | 2023.02.03 |
| [백준 1001] A-B (0) | 2023.02.03 |