PS/BOJ

[Python] 1969번 DNA

s_omi 2024. 7. 19. 10:23
728x90
반응형
SMALL

✏️ 문제

 

문제 파악

제일 중요한 건 이런 식으로 같은 index에 있는 문자끼리 묶어서 그 열에서 제일 많이 사용되는 문자를 s에 추가하는 것이 포인트이다.

제일 많은 사용되는 문자가 문자열과 비교해서 다르면 Hamming Distance += 1 하는 식으로 코드를 짜면 쉽게 풀 수 있다.

문자열에서 가장 많이 나오는 문자를 가져오기 위해선 collections.Counter를 사용하면 된다.

 

알고리즘

  • 그리디 알고리즘
  • 구현
  • 문자열
  • 브루트포스 알고리즘

 

 

코드

from collections import Counter

n, m = map(int, input().split())
hamming = 0
ary = []
char_ary = [[] for _ in range(m)] 

for i in range(n):
  ary.append(list(map(str, input())))

for i in range(m):
  for j in range(n):
    char_ary[i].append(ary[j][i])

  char_ary[i].sort()  # 여러 개 있을 때 사전순으로 해야하므로
  c = Counter(char_ary[i]).most_common(1)[0][0]
  print(c, end='')

  for j in range(n):
    if char_ary[i][j] != c:
      hamming += 1

print('\n' + str(hamming))

 

 

728x90
반응형
LIST

'PS > BOJ' 카테고리의 다른 글

[Python] 1758번 알바생 강호  (0) 2024.07.20
[Python] 11508번 2+1 세일  (0) 2024.07.20
[Python] 2828번 사과 담기 게임  (0) 2024.07.19
[Python] 19941번 햄버거 분배  (0) 2024.07.19
[Python] 2012번 등수 매기기  (0) 2024.07.19