Problem
- In DNA strings, symbols ‘A’ and ‘T’ are complements of each other, as ‘C’ and ‘G’.
- DNA 문자열에서 기호 ‘A’와 ‘T’는 서로 보완된다.
- ‘C’와 ‘G’도 서로 보완된다.
Solution 01
function DNAStrand(dna) {
let result = '';
for (let i = 0; i < dna.length; i++) {
if (dna[i] === 'A') {
result += 'T';
} else if (dna[i] === 'T') {
result += 'A';
} else if (dna[i] === 'C') {
result += 'G';
} else {
result += 'C';
}
}
return result;
}
DNAStrand('ATCG'); // TAGC
DNAStrand('AAAA'); // TTTT
DNAStrand('TTTT'); // AAAA
DNAStrand('CCCC'); // GGGG
DNAStrand('GGGG'); // CCCC
Solution 02
function DNAStrand(dna) {
const pairs = {
T: 'A',
A: 'T',
C: 'G',
G: 'C'
};
return dna.split('').map(i => pairs[i]).join('');
}
DNAStrand('ATCG'); // TAGC
DNAStrand('AAAA'); // TTTT
DNAStrand('TTTT'); // AAAA
DNAStrand('CCCC'); // GGGG
DNAStrand('GGGG'); // CCCC
split()
: 문자열을 부분 문자열로 분할하고, 새 배열로 반환한다.
map()
: 배열 내 모든 element에 대해, 호출한 함수의 결과를 모아 새 배열로 반환한다.
join()
: 배열의 모든 element를 결합하고, 새 문자열로 반환한다.
Solution 03
function DNAStrand(dna) {
const pairs = {
T: 'A',
A: 'T',
C: 'G',
G: 'C'
};
return dna.replace(/./g, i => pairs[i]);
}
DNAStrand('ATCG'); // TAGC
DNAStrand('AAAA'); // TTTT
DNAStrand('TTTT'); // AAAA
DNAStrand('CCCC'); // GGGG
DNAStrand('GGGG'); // CCCC
replace()
: 대응되는 문자열을 찾아 다른 문자열로 치환한다.
.
: 개행 문자를 제외한 모든 문자와 대응
g
: 전역 검색
Solution 04
function DNAStrand(dna) {
return dna.split('').map(i => {
return { T: 'A', A: 'T', C: 'G', G: 'C' }[i];
}).join('');
}
DNAStrand('ATCG'); // TAGC
DNAStrand('AAAA'); // TTTT
DNAStrand('TTTT'); // AAAA
DNAStrand('CCCC'); // GGGG
DNAStrand('GGGG'); // CCCC