๐ฉโ๐ป๐ [baekjoon] 1969๋ฒ: DNA
๐๏ธย 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