1969.โ DNA
์ ๋ฐ์ดํธ ์๊ฐ : 2023-04-23 07:56:29 +0000[Silver IV] DNA - 1969
์ฑ๋ฅ ์์ฝ
๋ฉ๋ชจ๋ฆฌ: 116760 KB, ์๊ฐ: 168 ms
๋ถ๋ฅ
๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ, ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ, ๊ตฌํ, ๋ฌธ์์ด
๋ฌธ์ ์ค๋ช
DNA๋ ์ด๋ค ์ ์ ๋ฌผ์ง์ ๊ตฌ์ฑํ๋ ๋ถ์์ด๋ค. ์ด DNA๋ ์๋ก ๋ค๋ฅธ 4๊ฐ์ง์ ๋ดํด๋ ์คํฐ๋๋ก ์ด๋ฃจ์ด์ ธ ์๋ค(Adenine, Thymine, Guanine, Cytosine). ์ฐ๋ฆฌ๋ ์ด๋ค DNA์ ๋ฌผ์ง์ ํํํ ๋, ์ด DNA๋ฅผ ์ด๋ฃจ๋ ๋ดํด๋ ์คํฐ๋์ ์ฒซ๊ธ์๋ฅผ ๋ฐ์ ํํํ๋ค. ๋ง์ฝ์ Thymine-Adenine-Adenine-Cytosine-Thymine-Guanine-Cytosine-Cytosine-Guanine-Adenine-Thymine๋ก ์ด๋ฃจ์ด์ง DNA๊ฐ ์๋ค๊ณ ํ๋ฉด, โTAACTGCCGATโ๋ก ํํํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ Hamming Distance๋ ๊ธธ์ด๊ฐ ๊ฐ์ ๋ DNA๊ฐ ์์ ๋, ๊ฐ ์์น์ ๋ดํด์คํฐ๋ ๋ฌธ์๊ฐ ๋ค๋ฅธ ๊ฒ์ ๊ฐ์์ด๋ค. ๋ง์ฝ์ โAGCAT"์ โGGAAT"๋ ์ฒซ ๋ฒ์งธ ๊ธ์์ ์ธ ๋ฒ์งธ ๊ธ์๊ฐ ๋ค๋ฅด๋ฏ๋ก Hamming Distance๋ 2์ด๋ค.
์ฐ๋ฆฌ๊ฐ ํ ์ผ์ ๋ค์๊ณผ ๊ฐ๋ค. N๊ฐ์ ๊ธธ์ด M์ธ DNA s1, s2, ..., sn๊ฐ ์ฃผ์ด์ ธ ์์ ๋ Hamming Distance์ ํฉ์ด ๊ฐ์ฅ ์์ DNA s๋ฅผ ๊ตฌํ๋ ๊ฒ์ด๋ค. ์ฆ, s์ s1์ Hamming Distance + s์ s2์ Hamming Distance + s์ s3์ Hamming Distance ... ์ ํฉ์ด ์ต์๊ฐ ๋๋ค๋ ์๋ฏธ์ด๋ค.
์ ๋ ฅ
์ฒซ ์ค์ DNA์ ์ N๊ณผ ๋ฌธ์์ด์ ๊ธธ์ด M์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๋์งธ ์ค๋ถํฐ N+1๋ฒ์งธ ์ค๊น์ง N๊ฐ์ DNA๊ฐ ์ฃผ์ด์ง๋ค. N์ 1,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๊ณ , M์ 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ Hamming Distance์ ํฉ์ด ๊ฐ์ฅ ์์ DNA ๋ฅผ ์ถ๋ ฅํ๊ณ , ๋์งธ ์ค์๋ ๊ทธ Hamming Distance์ ํฉ์ ์ถ๋ ฅํ์์ค. ๊ทธ๋ฌํ DNA๊ฐ ์ฌ๋ฌ ๊ฐ ์์ ๋์๋ ์ฌ์ ์์ผ๋ก ๊ฐ์ฅ ์์๋ ๊ฒ์ ์ถ๋ ฅํ๋ค.
๐ก Solutions
๐ DNA.py
def check(i,j):
if dnas[i][j] == 'A' : return 0
if dnas[i][j] == 'C' : return 1
if dnas[i][j] == 'G' : return 2
if dnas[i][j] == 'T' : return 3
def rev(x):
if x == 0 : return 'A'
if x == 1 : return 'C'
if x == 2 : return 'G'
if x == 3 : return 'T'
N, M = map(int,input().split())
dnas = [list(input()) for _ in range(N)]
ans = []
for j in range(M):
acgt = [0, 0, 0, 0]
for i in range(N):
target = check(i,j)
acgt[target] += 1
x = acgt.index(max(acgt))
ans.append(rev(x))
print(''.join(ans))
cnt = 0
for i in range(N):
for j in range(M):
if ans[j] != dnas[i][j]:
cnt += 1
print(cnt)