DNAStrand.js (7kyu 11)

Codewars 알고리즘 풀이


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