[프로그래머스#JS] 뉴스 클러스트링
문제
뉴스 클러스트링 https://programmers.co.kr/learn/courses/30/lessons/17677
해결
- 2개씩 쪼갠 배열 구하기
1-1. 문자열만 고르기
const pattern_str = /[a-zA-Z]/;
// pattern_str.test(문자)
pattern_str.test("*"); // false
pattern_str.test("a"); // true
- 교집합, 합집합 구현
for (let i = 0; i < arr2.length; i++) {
if (arr1.indexOf(arr2[i]) >= 0) {
intersection.push(arr1.splice(arr1.indexOf(arr2[i]), 1));
}
union.push(arr2[i]);
}
for (let i = 0; i < arr1.length; i++) {
union.push(arr1[i]);
}
- 예외 처리
교집합이 0 -> 1(65536), 합집합이 0 -> 0
코드
function solution(str1, str2) {
const pattern_str = /[a-zA-Z]/;
const arr1 = [];
const arr2 = [];
str1 = str1.split("");
str1 = str1.map((v) => v.toLowerCase());
str2 = str2.split("");
str2 = str2.map((v) => v.toLowerCase());
str1.forEach((_, index) => {
const first = str1[index];
const second = str1[index + 1];
if (
pattern_str.test(first) &&
pattern_str.test(second) &&
second !== undefined
)
arr1.push(first + second);
});
str2.forEach((_, index) => {
const first = str2[index];
const second = str2[index + 1];
if (
pattern_str.test(first) &&
pattern_str.test(second) &&
second !== undefined
)
arr2.push(first + second);
});
var intersection = []; // 중복포함, 교집합 배열 (multi set)
var union = []; // 중복포함, 합집합 배열
for (let i = 0; i < arr2.length; i++) {
if (arr1.indexOf(arr2[i]) >= 0) {
intersection.push(arr1.splice(arr1.indexOf(arr2[i]), 1));
}
union.push(arr2[i]);
}
for (let i = 0; i < arr1.length; i++) {
union.push(arr1[i]);
}
if (union.length === 0) return 65536;
if (intersection.length === 0) return 0;
return Math.floor((intersection.length / union.length) * 65536);
}
Author And Source
이 문제에 관하여([프로그래머스#JS] 뉴스 클러스트링), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tunakim/프로그래머스JS-뉴스-클러스트링저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)