Updated:

๐Ÿ–๏ธย solution

import sys
from collections import Counter

"""
[์‹œ๊ฐ„]
1) 20:00 ~ 20:30

[์š”์•ฝ]
1) DNA๋ฅผ ์ด๋ฃจ๋Š” ๋‰ดํด๋ ˆ์˜คํ‹ฐ๋“œ์˜ ์ฒซ๊ธ€์ž๋ฅผ ๋”ฐ์„œ ํ‘œํ˜„, ์ข…๋ฅ˜๋Š” 4๊ฐ€์ง€
    - A, T, G, C
2)  N๊ฐœ์˜ ๊ธธ์ด M์ธ DNA๊ฐ€ ์ฃผ์–ด์ง€๋ฉด Hamming Distance์˜ ํ•ฉ์ด ๊ฐ€์žฅ ์ž‘์€ DNA S๋ฅผ ๊ตฌํ•˜๊ธฐ
    - Hamming Distance: ๊ฐ ์œ„์น˜์˜ ๋‰ดํด์˜คํ‹ฐ๋“œ ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์˜ ๊ฐœ์ˆ˜
    => ์ž๊ธฐ ์ž์‹ ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ชจ๋“  ์›์†Œ์™€ Hamming Distance๋ฅผ ๊ตฌํ•˜๊ณ  ์ดํ•ฉ์ด ๊ฐ€์žฅ ์ž‘์€ ์•„์ด๋ฅผ ๋ฆฌํ„ดํ•ด๋ผ
"""
N, M = map(int, sys.stdin.readline().split())
dna = [sys.stdin.readline().rstrip() for _ in range(N)]
result, char_list = 0, []  # for append char, count

for i in range(M):
    tmp = []
    for j in range(N):
        tmp.append(dna[j][i])
    counter = Counter(tmp)
    rank_counter = sorted(counter.most_common(), key=lambda x: (-x[1], x[0]))  # - ๋ถ™์ธ ์ •๋ ฌ ์กฐ๊ฑด์€ ํ˜„์žฌ ์ •๋ ฌ ๊ธฐ์ค€๊ณผ ๋ฐ˜๋Œ€๋กœ
    result += sum(counter.values()) - rank_counter[0][1]  # counting
    char_list.append(rank_counter[0][0])  # append char

print(''.join(char_list))
print(result)

๐Ÿ’กย idea

  • 1) linear search ํ•˜๋ฉด์„œ ํ•œ ๊ฐœ๋ผ๋„ ์ฒ ์ž๊ฐ€ ๋‹ค๋ฅธ ์ž๋ฆฌ์ˆ˜ ์ฐพ๊ธฐ
    • ๋นˆ๋„์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์ฒ ์ž๋ฅผ ํ•ด๋‹น ์ž๋ฆฌ์˜ ๋ฌธ์ž๋กœ ๊ฒฐ์ •, collections.Counter ์ด์šฉ
      • ์ตœ๋นˆ๊ฐ’์ด ์—ฌ๋Ÿฌ๊ฐœ์ธ ์ƒํ™ฉ (์‚ฌ์ „์‹ ์šฐ์„ )
        • ๋‹ค์ค‘ ์ •๋ ฌ ์‚ฌ์šฉํ•ด ์ตœ๋นˆ๊ฐ’ & ์‚ฌ์ „์‹ ์ •๋ ฌ ๋™์‹œ ์ ์šฉ

๋ฌธ์ œ ํ’€์ด์— ํ•„์š”ํ•œ ์•„์ด๋””์–ด๋ณด๋‹ค ๋‹ค์ค‘ ์ •๋ ฌ ์‚ฌ์šฉ๋ฒ•์„ ์ •ํ™•ํžˆ ์•„๋Š” ๊ฒƒ์ด ํ•ด๊ฒฐ์— ๋” ์ค‘์š”ํ–ˆ๋˜ ๋ฌธ์ œ๋‹ค. ์ฝ”๋“œ ์ฃผ์„์— ์จ์žˆ๋Š”๋Œ€๋กœ - ๋ถ™์ธ ์กฐ๊ฑด์€ ํ˜„์žฌ ์ •๋ ฌ ๊ธฐ์ค€๊ณผ ๋ฐ˜๋Œ€๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฑธ ๋ชจ๋ฅด๋ฉด ํ•ด๊ฒฐํ•˜๊ธฐ ๊ฝค๋‚˜ ๊นŒ๋‹ค๋กœ์šด ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

Leave a comment