본문 바로가기
Coding Test/JavaScript

[Javascript] (백준 1969) DNA

by Chaedie 2022. 7. 9.
728x90

[Javascript] (백준 1969) DNA

💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.

내 풀이

//* 인풋 (디폴트)
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = require('fs').readFileSync(filePath).toString().trim().split('\n');
//* 인풋 (커스텀)
const [n, m] = input[0].split(' ').map((x) => +x);
const DNAs = [];
for (let i = 0; i < n; i++) {
  DNAs.push(input[i + 1].trim());
}

//* 함수 콜 (고정)
let answer = solution();
console.log(typeof answer === 'number' ? answer : answer.trim());

//* 로직함수
function solution() {
  const answer = [];
  const distances = [];

  for (let i = 0; i < m; i++) {
        // 1) 각 자리별로 문자가 나온 횟수를 센다.
    const map = new Map();
    for (let j = 0; j < n; j++) {
      map.set(DNAs[j][i], (map.get(DNAs[j][i]) || 0) + 1);
    }

        // 2) 카운트가 가장 많은 놈 중 사전순 찾아 answer에 넣기
        // 3) n - maxCount = 디스턴스
    let maxCount = 0;
    for (let [k, v] of map) {
      if (v > maxCount) {
        maxCount = v;
        answer[i] = k;
        distances[i] = n - maxCount;
      } else if (v === maxCount) {
        k.localeCompare(answer[i]) < 0 ? (answer[i] = k) : null;
      }
    }
  }

  return [answer.join(''), distances.reduce((acc, cur) => (acc += cur), 0)].join('\n');
}
  • 주석으로 설명 했습니다.

배운 점, 느낀 점

  • 완전탐색은 어떻게 풀어야 좋은 풀이인지 아직 감이 안잡힌다.
  • 일단 많이 풀면서 요구사항에 맞게 구현하는 연습부터 하는게 맞는것 같다.

댓글