주어진 문자열을 두 글자씩 끊는데, 두 글자는 영문자를 제외한 특수문자, 숫자를 포함하면 안된다. 같은 문자가 있을 때, splice로 지워서 교집합이랑 합집합을 구해줬다. 풀이를 까먹을 때 쯤에 다시 한번 풀어봐야겠다. 🤧
function cutStr(str) {
let cutArr = [];
for(let i = 0; i < str.length - 1; i++){
str = str.toLowerCase();
let pieceStr = str.split('').splice(i, 2).join('');
if(/[^a-z]/.test(pieceStr) === false) cutArr.push(pieceStr);
}
return cutArr;
}
function solution(str1, str2) {
let cut1 = cutStr(str1);
let cut2 = cutStr(str2);
let cross = 0;
let sum = cut1.length + cut2.length;
cut1.forEach(cut => {
if(cut2.indexOf(cut) !== -1){
cut2.splice(cut2.indexOf(cut), 1);
cross += 1;
sum -= 1;
}
});
return sum === 0 ? 65536 : Math.floor(cross / sum * 65536);
}
자카드 유사도는 집합 간의 유사도를 검사하는 여러 방법 중의 하나이다. 두 집합 A, B 사이의 자카드 유사도 J(A, B)는 두 집합의 교집합 크기를 두 집합의 합집합 크기로 나눈 값으로 정의된다.
test()
: 주어진 문자열이 정규 표현식을 만족하는지 판별하고, 그 여부를 true 또는 false로 반환한다.
regexObj.test(str)
indexOf()
: 배열 내의 요소의 최초의 인덱스를 반환한다. 발견되지 않으면 -1
arr.indexOf(searchElement[, fromIndex])
searchElement : 배열에서 찾을 요소
fromIndex : 검색을 시작할 인덱스
slice()
: 어떤 배열의 begin부터 end까지(end 미포함)에 대한 얕은 복사본을 새로운 배열 객체로 반환한다. 원본 배열은 바뀌지 않는다.
arr.slice([begin[, end]])
begin
추출 시작점에 대한 인덱스를 의미한다.
음수 인덱스는 배열의 끝에서부터의 길이를 나타낸다.
end
추출을 종료할 기준 인덱스입니다.
end가 생략되면 slice()는 배열의 끝까지 추출한다.
splice()
: 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경한다. 제거한 요소를 담은 배열을 반환한다.
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
start
배열의 변경을 시작할 인덱스이다.
음수인 경우 배열의 끝에서부터 요소를 세어나간다.
deleteCount
배열에서 제거할 요소의 수입니다.
deleteCount를 생략하면 start부터의 모든 요소를 제거한다.
item1, item2, ...
배열에 추가할 요소이다.
아무 요소도 지정하지 않으면 splice()는 요소를 제거하기만 한다.
floor()
: 소수값이 존재할 때 소수값을 버린 값을 반환한다.
Math.floor(x)
round()
: 소수값이 존재할 때 소수값을 반올림한 값을 반환한다.
Math.round(x)
ceil()
: 소수값이 존재할 때 소수값을 올린 값을 반환한다.
Math.ceil(x)