👉 문제 링크
가끔 풀었던 문제를 다시 풀 때가 있다.
코드가 같을 때도 있지만 대부분의 구현 문제는 항상 코드가 다르다.
이번에는 접근이 완전 달라서 기록해보려고 한다.
👉 첫번째 풀이
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)
최근에 해시 문제를 많이 풀어서 그런가 딕셔너리로 개수를 세야겠다는 생각이 들어서 딕셔너리를 사용하여 문제를 풀었다.
두개를 비교해보면 첫번째 풀이가 훨씬 이해하기도 쉽고 시간도 적게 드는 풀이인 것 같다. 그치만 두번째 풀이가 나중 코드라는 점.....
이게 요즘 고민이다.
코테를 보려면 모든 부분에서 최적화 되어야 하는데 전혀 그러지 못하는 모양새ㅠ
양치기로 해결될 문제일까?