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');
}
- 주석으로 설명 했습니다.
배운 점, 느낀 점
- 완전탐색은 어떻게 풀어야 좋은 풀이인지 아직 감이 안잡힌다.
- 일단 많이 풀면서 요구사항에 맞게 구현하는 연습부터 하는게 맞는것 같다.
'Coding Test > JavaScript' 카테고리의 다른 글
[Javascript] (프로그래머스) 최솟값 구하기 (level 2) (0) | 2022.09.27 |
---|---|
코드카타 못 푼 문제 (재귀 함수) (최단 경로?) (0) | 2022.08.18 |
[Javascript] (프로그래머스 level 2) 피보나치 수 (0) | 2022.08.15 |
[Javascript] (백준 11170) 0의 개수 (0) | 2022.07.09 |
[Javascript] (프로그래머스 level 1) 약수의 개수와 덧셈 (0) | 2022.07.08 |
[Javascript] (프로그래머스 level 1) 로또의 최고 순위와 최저 순위 (0) | 2022.07.06 |
[Javascript] (프로그래머스 level 2) 기능 개발 (0) | 2022.07.02 |
[Javascript] (프로그래머스 level 2) 숫자의 표현 (0) | 2022.07.02 |
댓글