[BOJ/Python] 1969 : DNA

정나영·2024년 4월 25일
0

👉 문제 링크

가끔 풀었던 문제를 다시 풀 때가 있다.
코드가 같을 때도 있지만 대부분의 구현 문제는 항상 코드가 다르다.
이번에는 접근이 완전 달라서 기록해보려고 한다.

👉 첫번째 풀이

n,m = map(int, input().split())

arr = []
result,d = [],0
for _ in range(n):
    arr.append(input())

for i in range(m):
    a,t,g,c = 0,0,0,0
    for j in range(n):
        if arr[j][i] == 'A':
            a+=1
        if arr[j][i] == 'T':
            t+=1
        if arr[j][i] == 'G':
            g+=1
        if arr[j][i] == 'C':
            c+=1
    
    if max(a,t,g,c) == a:
        result += 'A'
        d += c+g+t
    elif max(a,t,g,c) == c:
        result += 'C'
        d += a+t+g
    elif max(a,t,g,c) == g:
        result += 'G'
        d += a+t+c
    elif max(a,t,g,c) == t:
        result += 'T'
        d += a+g+c
    
print(''.join(result))
print(d)

👉 두번째 풀이

n,m = map(int, input().split())

dna = []
for _ in range(n):
    dna.append(input())

result = ''
cnt = 0

for i in range(m):
    dic = {}
    for j in range(n):
        if dna[j][i] in dic:
            dic[dna[j][i]] += 1
        else:
            dic[dna[j][i]] = 1
    
    dic = sorted(dic.items(), key = lambda x : (-x[1], x[0]))

    result += dic[0][0]
    cnt += n - dic[0][1]

print(result)
print(cnt)

최근에 해시 문제를 많이 풀어서 그런가 딕셔너리로 개수를 세야겠다는 생각이 들어서 딕셔너리를 사용하여 문제를 풀었다.

두개를 비교해보면 첫번째 풀이가 훨씬 이해하기도 쉽고 시간도 적게 드는 풀이인 것 같다. 그치만 두번째 풀이가 나중 코드라는 점.....

이게 요즘 고민이다.
코테를 보려면 모든 부분에서 최적화 되어야 하는데 전혀 그러지 못하는 모양새ㅠ
양치기로 해결될 문제일까?

0개의 댓글