Algorithm/코플릿

set.has

2023. 4. 20. 08:37
목차
  1. 🏋🏽문제

set객체는 중복되지 않는 유일한 값들의 집합이다.
배열과 유사하지만

 

중복된요소를 가질 수 없다는점,

순서에 의미가 없다는 점,

인덱스로 접근이 불가능하다는 점이 다르다.

 

Set은 수학적 집합을 구현하기위한 자료구조이다.

여집합, 차집합, 교집합, 합집합 등을 구현할 수 있다.

 

학생시절 공부한 벤 다이어그램이 생각난다 첫 주제였어서 자주봄

 


Set 객체 생성
set 생성자 함수로 생성한다. 함수에 전달된 인수가 없다면 빈 Set객체가 생성된다.

중복된 배열을 인수로 준다면 저장되지 않는다.

Set의 프로토타입을 살펴보면 다양한 메서드들이 있는데

이번 코플릿 문제에서 Set.has을 활용한 문제가 있었다

 

🏋🏽문제

두 개의 배열(base,sample)을 입력받아 sample이 base의 부분집합인지 여부를 리턴

Set.has는 Set객체에 특정 요소 존재 여부를 확인하고 boolean값을 리턴한다.

 

처음에 sample을 그대로 인자로 주었다가 계속 false가 나왔다.

 배열 그 자체는 특정"요소" 그 자체이므로 [1]이 아니라 1이 들어있는게 맞다.

[[1],2,3,4,5]라면?

false가 나와서 당황했다.

알아보니 같은 배열의 값이라 하더라도

has메소드에 배열을 인자로 전달하면

다른 참조값을 가지는 별개의 객체이기 때문에 false가 반환되는것이었다.

 

 

const isSubsetOf = function (base, sample) {
  const setBase = new Set(base)
  return sample.every(el=>setBase.has(el))
};

시간 복잡도를 고려하여 새로 작성한 코드이다.

every 메소드는 각 요소가 주어진 함수에 의해 제공된 테스트를 통과하는지 여부를 리턴한다.

 

첫번째 구현에서는 set.has 매소드가 sample배열의 각 요소를 하나씩 검사했고

 

두번째 구현에서는 every메소드가 sample배열의 모든 요소를 순회하면서

각 요소가 'setBase' Set 객체에 존재하는지 검사한다.

every메소드는 하나라도 false가 나오면 바로 false를 리턴한다.

 

만약 sample배열이 base의 부분집합이 아니라면

마지막 부분인 setBase.has(el)부분에서 false가 반환되어 검사가 중단되고 false를 리턴한다.

'Algorithm > 코플릿' 카테고리의 다른 글

Daily Coding 22(메모이제이션)  (2) 2023.04.14
JSON.stringify 와 재귀를 이용한 과제  (0) 2023.04.12
Daily Coding 18  (0) 2023.04.07
Server과제  (0) 2023.04.06
Daily Coding 17  (0) 2023.04.06
  1. 🏋🏽문제
'Algorithm/코플릿' 카테고리의 다른 글
  • Daily Coding 22(메모이제이션)
  • JSON.stringify 와 재귀를 이용한 과제
  • Daily Coding 18
  • Server과제
Summer.dev
Summer.dev
프론트엔드 개발자 Summer 입니다! 피드백은 언제나 환영입니다.
Summer.dev
꾸준함이 무기
Summer.dev
전체
오늘
어제
  • 분류 전체보기
    • Projects
      • Next.js board-project
      • MOMO
    • 원티드
    • 우테코 프리코스
    • JavaScript
    • React
    • TypeScript
    • Node.js
    • Algorithm
      • 코플릿
      • 개념정리
    • 네트워크
    • 오류해결
    • 회고
    • 기술면접준비
    • git,github
    • 소소하게 궁금한것
    • Next.js Beta Docs 번역
    • 디자인패턴
    • 트러블슈팅
    • 번역

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • 메모이제이션

최근 댓글

최근 글

hELLO · Designed By 정상우.
Summer.dev
set.has
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.