본문 바로가기
코딩테스트(알고리즘)/baekjoon

[baekjoon] 1969 DNA (Javascript)

by Cafe Mocha 2022. 6. 24.

1969번: DNA (acmicpc.net)

 

1969번: DNA

DNA란 어떤 유전물질을 구성하는 분자이다. 이 DNA는 서로 다른 4가지의 뉴클레오티드로 이루어져 있다(Adenine, Thymine, Guanine, Cytosine). 우리는 어떤 DNA의 물질을 표현할 때, 이 DNA를 이루는 뉴클레오

www.acmicpc.net


접근 : BF, 구현

 

문제 접근을 잘못해서 고생했던 문제이다.

주어지는 입력 중 차이가 가장 적은 문자열을 찾는줄 알았는데 새로운 문자열을 생성하고 차이의 최소를 출력하는 문제였다.

잘못풀었다는 것을 알고 다시 코드를짜서 코드가 정신없이 작성되었다,

 

Javascript

let input = require("fs")
  .readFileSync("input.txt") //"/dev/stdin"
  .toString()
  .split("\n")
  .map((val) => val.trim());
function solution(input) {
  //input
  let [n, m] = input.shift().split(" ");
  let dna = [];
  let answer = [];
  let psum = 0;
  let D = ["A", "C", "G", "T"];

  for (let i = 0; i < n; i++) {
    let temp = input.shift();
    dna.push(temp);
  }

  for (let i = 0; i < m; i++) {
    let ACGT = [0, 0, 0, 0];
    for (let j = 0; j < n; j++) {
      if (dna[j][i] === "A") ACGT[0]++;
      else if (dna[j][i] === "C") ACGT[1]++;
      else if (dna[j][i] === "G") ACGT[2]++;
      else ACGT[3]++;
    }
    let max = -9999;
    idx = 0;
    for (let a = 0; a < 4; a++) {
      if (ACGT[a] > max) {
        max = ACGT[a];
        idx = a;
      }
    }
    answer.push(D[idx]);
  }

  answer = answer.join("");

  dna.forEach((v) => {
    for (let i = 0; i < m; i++) {
      if (answer[i] !== v[i]) psum++;
    }
  });

  console.log(answer);
  console.log(psum);
}

solution(input);