카테고리 없음

자바스크립트로 하는 자료구조와 알고리즘(9장) - 집합

sunnykim91 2019. 10. 24. 18:18

집합은 유한하고 구분되는 객체들의 그룹

 

자바스크립트에서는 Set이 기본 지원됨

 

집합 연산

 

삽입

let exampleSet = new Set();
exampleSet.add(1)

중복해서 추가된다면 추가되지 않는다.

 

삭제

let exampleSet = new Set();
exampleSet.add(1)
exampleSet.delete(1)  // true

boolean값을 반환한다. 

 

포함

이역시 boolean값을 반환한다.

has(1) 이런식으로 사용

 

 

 

교집합

function intersectSets (setA, setB) {
  let intersection = new Set();
  for (let elem of setB){
    if(setA.has(elem)){
      intersection.add(elem);
    }
  }
  return intersection;
}

let setA = new Set([1,2,3,4]);
let setB = new Set([2,3]);
console.log(intersectSets(setA, setB));

 

상위 집합 여부 확인

function isSuperset (setA, subset) {
  for (let elem of subset){
    if(!setA.has(elem)){
      return false;
    }
  }
  return true;
}

let setA = new Set([1,2,3,4]);
let setB = new Set([2,3]);
let setC = new Set([5]);

console.log(isSuperset(setA, setB));
console.log(isSuperset(setA, setC));

 

 

합집합

function unionSet (setA, setB) {
  let union = new Set(setA);
  for (let elem of setB){
    union.add(elem);
  }
  return union;
}

let setA = new Set([1,2,3,4]);
let setB = new Set([2,3]);
let setC = new Set([5]);

console.log(unionSet(setA, setB));
console.log(unionSet(setA, setC));

 

 

차집합

 

function differenceSet (setA, setB) {
  let difference = new Set(setA);
  for (let elem of setB){
    difference.delete(elem);
  }
  return difference;
}

let setA = new Set([1,2,3,4]);
let setB = new Set([2,3]);

console.log(differenceSet(setA, setB));

 

연습문제 

 

집합을 사용해 배열의 중복 항목 확인하기

function checkDuplicates(arr) {
  let mySet = new Set(arr);
  return mySet.size < arr.length;
}

console.log(checkDuplicates([1, 1, 2, 3, 4, 5]));
console.log(checkDuplicates([1, 2, 3, 4, 5]));

시간복잡도 : O(n)

 

개별적인 배열들로부터 유일한 값만을 반환하기

 

두배열을 합친 다음 해당 두 배열을 집합으로 변환함으로써 유일한 항목들만을 저장한다. 

그러고 나서 해당 집합을 다시 배열로 변환하면 결과적으로 유일한 값을 가진 배열이 나온다.

function uniqueList(arr1, arr2) {
  let mySet = new Set(arr1.concat(arr2));
  return Array.from(mySet);
}

console.log(uniqueList([1, 1, 2, 2], [2, 3, 4, 5]));
console.log(uniqueList([1, 2], [3, 4, 5]));
console.log(uniqueList([], [2, 2, 3, 4, 5]));

 

시간 복잡도 O(n+m)

 

반응형