티스토리 뷰

알고리즘/백준

[백준] 1969. DNA

빙빙 2021. 4. 1. 22:29

풀이

1. 각 DNA의 자리마다 어떤 알파벳이 많은지 세어 count해준다.

2. 최대 카운트를 새로운 리스트에 넣어준다. 여기서 최대값이 두개가 있다면 알파벳의 앞순서들이 우선 되어야 하므로 append가 수행되었으면 check에 1값을 넣어주어 중단하게 한다.

3. new_DNA와 원래 DNA들을 비교해서 다른 원소가 있으면 count해준다.


N, M = map(int, input().split()) #N = DNA 갯수 M = DNA의 길이
DNA = [list(input())for _ in range(N)]

apb = ['A','C','G','T']
#자리마다 뭐가 많은지 세어줌
max_apb = 0
new_DNA = []

for j in range(M):
    cnt_apb = [0, 0, 0, 0]

    for i in range(N):
        if DNA[i][j] == 'A':
            cnt_apb[0] += 1
        elif DNA[i][j] == 'C':
            cnt_apb[1] += 1
        elif DNA[i][j] == 'G':
            cnt_apb[2] += 1
        elif DNA[i][j] == 'T':
            cnt_apb[3] += 1
    check = 0
    max_apb = max(cnt_apb)
    for i in range(4):
        if check == 0 and cnt_apb[i] == max_apb:
            new_DNA.append(apb[i])
            check = 1 #알파벳 순으로 하기 위해 1을 넣어주어 append 중단 시킴
print(''.join(new_DNA))

cnt_dif = 0
for i in range(N):
    for j in range(M):
        if DNA[i][j] != new_DNA[j]: #각 dna요소와 같지 않다면 카운트
            cnt_dif += 1

print(cnt_dif)




'알고리즘 > 백준' 카테고리의 다른 글

[백준] 1475. 방 번호  (0) 2021.04.03
[백준] 9375. 패션왕 신해빈  (0) 2021.04.01
[백준] 12904 . A와 B  (0) 2021.03.28
[백준] 16953. A -> B  (0) 2021.03.27
[백준] 11399. ATM  (0) 2021.03.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함