728x90
브루트포스문제..
N, M = map(int, input().split())
lst = []
result = []
res = 0
acgt = [0 for i in range(26)] #A,C,G,T
for i in range(N):
lst.append(input())
for i in range(M):
for j in range(N):
acgt[ord(lst[j][i]) - ord('A')] += 1
result.append(chr(acgt.index(max(acgt)) + ord('A')))
acgt = [0 for i in range(26)]
for i in range(N):
for j in range(M):
if (result[j] != lst[i][j]):
res += 1
print(('').join(map(str, result)))
print(res)
문제를 잘못 이해해서 다시 이해하기까지 시간이 좀 걸림
사실 더 깔끔히 풀고싶었는데 다른 풀이를 찾아봐도 거기서 거기더라..
그래서 그냥 내 코드에 대한 설명을 하고 알아둬야할 지식을 알아두고자 한다.
<코드 설명>
1.우선 같은값이 있으면 사전순으로 가장 먼저 오는 것을 출력하라고 했으므로 알파벳을 담을 수 있는 0으로 채워진 빈 리스트를 만듦
2.주어진 dna가닥들에서 각 줄에서 가장 많이 나온 알파벳들로 구성된 것이 우리가 구해야하는 답이므로 해당하는 알파벳이 나올 때마다 list에서 수를 증가시켜줌
3.채워진 list에서 가장 큰 값의 인덱스의 값을 구해서 거기에 'A'라는 char값을 더하면 알파벳이 되므로 그 상태로 result에 넣어줌
4.각 dna가닥들을 내가 만든 result 와 비교하면서 알파벳이 다를 때마다 더해서 최종적인 숫자까지 구해줌
<알아둬야 할 요소>
1.ord('A') => char 형태를 int로 바꾸기 위해 필요
2.chr(65) => int형태를 char로 바꾸기 위해 필요
3.lst.index(max(lst)) => 리스트에서 가장 값이 큰 항목의 인덱스값을 구해줌
728x90
'알고리즘 공부(C++)' 카테고리의 다른 글
백준 12782 비트 우정지수 (파이썬/그리디) (1) | 2022.10.08 |
---|---|
10994 별 찍기 - 19 (파이썬/재귀) (0) | 2022.10.06 |
백준 1021 회전하는 큐 (파이썬 / 자료구조) (0) | 2022.09.28 |
백준 1735 분수 합 파이썬 (0) | 2022.09.18 |
백준 17609 회문 (파이썬 / 문자열) (0) | 2022.09.15 |