문제
https://www.acmicpc.net/problem/12891
12891번: DNA 비밀번호
평소에 문자열을 가지고 노는 것을 좋아하는 민호는 DNA 문자열을 알게 되었다. DNA 문자열은 모든 문자열에 등장하는 문자가 {‘A’, ‘C’, ‘G’, ‘T’} 인 문자열을 말한다. 예를 들어 “ACKA”
www.acmicpc.net
코드
내가 작성한 코드
num1, num2 = map(int, input().split())
txt = input()
arr = list(map(int, input().split()))
dic = {'A':0, 'C':0, 'G':0, 'T':0}
count = 0
for i in range(num1 - num2 + 1):
result = txt[i:num2 + i]
dic['A'] = result.count("A")
dic['C'] = result.count("C")
dic['G'] = result.count("G")
dic['T'] = result.count("T")
if dic['A'] >= arr[0] and dic['C'] >= arr[1] and dic['G'] >= arr[2] and dic['T'] >= arr[3]:
count += 1
print(count)

해석
| 예제 입력1 | 예제 출력2 |
| 9 8 CCTGGATTG 2 0 1 1 |
0 |
| 예제 입력2 | 예제 출력2 |
| 4 2 GATA 1 0 0 1 |
2 |
num1, num2 = map(int, input().split())
txt = input()
arr = list(map(int, input().split()))
dic = {'A':0, 'C':0, 'G':0, 'T':0}
count = 0
사실 내 방법대로 진행하면 위 이미지처럼 코딩테스트에서는 시간초과로 실패하지만... 어느정도 타협하기로했다..
우선 입력값을 받아주기위해 변수를 선언해주고(num1, num2, txt, arr) count를 체크하기위해 초기화가 0인 변수를 선언해주었다.
for i in range(num1 - num2 + 1):
result = txt[i:num2 + i]
dic['A'] = result.count("A")
dic['C'] = result.count("C")
dic['G'] = result.count("G")
dic['T'] = result.count("T")
if dic['A'] >= arr[0] and dic['C'] >= arr[1] and dic['G'] >= arr[2] and dic['T'] >= arr[3]:
count += 1
print(count)
처음 for문에 반복을 num1 - num2 + 1 로 해주었는데 이유는 예시로 들면
| 예제2 'GATA' 를 2칸씩 슬라이드 | |
| 1회 | GA |
| 2회 | AT |
| 3회 | TA |
| 예제1 'CCTGGATTG' 를 8칸씩 슬라이드 | |
| 1회 | CCTGGATT |
| 2회 | CTGGATTG |
예제 2번은 총 3회 반복, 예제 1번은 총 2번 반복하는것을 확인할 수 있는데. [문자열의 길이 수] - [슬라이스길이] + 1 을 하면 슬라이스 회수가 나오기 때문에 위 식을 입력해주었다.
result 값에 입력받은 txt[i:num2 + i]을 넣어주고 미리 만들어놓았던 dic['A'], dic['C'], dic['G'], dic['T'] value 값에 count값을 넣어주고 if 문을 사용하여 모든 조건에 부합할 때 count를 1 올려줄 수 있게 코드를 작성하였다.
이렇게하면 답은 맞게 나오나 시간초과가 떠 결과적으로는 실패이다..
'파이썬 > 코딩테스트' 카테고리의 다른 글
| [Do-it 코딩 테스트] 010.최솟값 찾기1(11003) (0) | 2023.11.04 |
|---|---|
| [Do-it 코딩 테스트] 008. '좋은 수'구하기(1253) (1) | 2023.10.30 |
| [Do-it 코딩 테스트] 007. 주몽의 명령(1940) (0) | 2023.10.30 |
| [Do-it 코딩 테스트] 006. 연속된 자연수의 합 구하기(2018) (0) | 2023.10.30 |
| [Do-it 코딩 테스트] 004. 숫자의 합 구하기2(11660) (0) | 2023.10.27 |