Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 혼자 공부하는 C언어
- 윤성우의 열혈 자료구조
- list 컬렉션
- 이것이 자바다
- C 언어 코딩 도장
- Graph
- Serialization
- coding test
- C programming
- insertion sort
- 메모리구조
- Selection Sorting
- Algorithm
- 윤성우 열혈자료구조
- 이스케이프 문자
- datastructure
- Stack
- 알기쉬운 알고리즘
- JSON
- stream
- buffer
- R
- s
Archives
- Today
- Total
Engineering Note
[BOJ:1696] DNA 본문
Link : https://www.acmicpc.net/problem/1969
Note
문제를 정확히 읽자.
잘 못 읽은 문장
- N개의 길이인 M인 DNA 등의 문장
- S와 S1의 Hamming Distance등의 문장
구해야할 새로운 DNA s는 입력으로 주어진 DNA들의 각 위치 별로 가장 많이 등장한 뉴클레오티드로 구성하면 Hamming Distance 합이 최소가 되는 DNA s를 구할 수 있다.
예를 들면 아래와 같은 입력이 주어 졌을 때 새로 구할 S의 첫 번째 뉴클레오티드를 T로 하면 3번째 "AAAGATCC" DNA에서만 첫 번째 자리에서 Hamming Distance값이 더해진다. 즉, 새로 구할 DNA는 주어진 DNA의 각 자리를 모두 확인해서 빈도수가 높은 뉴클레오티드로 채워주면 된다. 이때 각 자리별 뉴클레오티드의 최대 빈도수가 동일하면 알파벳 순서로 배치해야하므로 주의한다.
5 8
TATGATAC
TAAGCTAC
AAAGATCC
TGAGATAC
TAAGATGT
Code
from itertools import product
import sys
input = sys.stdin.readline
n,m = map(int,input().split())
DNAs = []
for _ in range(n):
DNAs.append(input().rstrip())
nucleotides = ["A","C","G","T"] #알파벳 순서로
DNA = ""
# DNA의 각 위치별로 가장 빈도수 높은 Nucleotide를 체크
for i in range(m):
nucleotide_cnt = {"A":0,"C":0,"G":0,"T":0}
for j in range(n):
nucleotide_cnt[DNAs[j][i]] += 1
nucleotide = max(nucleotide_cnt.values())
for key in nucleotides:
if nucleotide_cnt[key] == nucleotide:
DNA += key
break
cnt = 0
for i in range(n):
for j in range(m):
if DNA[j] != DNAs[i][j]:
cnt += 1
print(DNA)
print(cnt)
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ:11053] 가장 긴 증가하는 부분 수열 (0) | 2022.05.26 |
---|---|
[BOJ:2579] 계단 오르기 (0) | 2022.05.25 |
[BOJ:1010] 다리놓기 (0) | 2022.05.13 |
[BOJ:1018] 체스판 다시 칠하기 (0) | 2022.05.13 |
[BOJ:1913] 달팽이 (0) | 2022.05.10 |
Comments