LeeWang_31
이왕31
LeeWang_31
전체 방문자
오늘
어제
  • 분류 전체보기 (234)
    • 프로젝트 (2)
      • 사이드 프로젝트 (2)
      • Codestates_pre_project (0)
    • 프론트엔드 (169)
      • Html (19)
      • CSS (18)
      • JavaScript (29)
      • Codestates (76)
      • 코딩노트 (27)
    • 백엔드 (10)
      • node (10)
    • 구르는 돌 🌑 (16)
      • Codestates (11)
      • 생각 (4)
      • 공부 흔적 (1)
    • 정보 (18)
      • 오류노트 (2)
      • 인텔리제이 정보 (9)
      • 깃 정보 (3)
      • 기타 정보 (4)
      • 안드로이드스튜디오 정보 (0)
    • CS (7)
      • 이론공부 (7)
    • App (6)
      • Android (3)
      • Kotlin (3)
    • 컴퓨터 수학 (5)
      • 암호론 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • figjam
  • 코드스테이츠
  • 2693
  • TODOlist
  • 코딩애플
  • html
  • UI/UX
  • ubuntu
  • 백준
  • 사용자친화웹
  • 사이드프로젝트
  • 안드로이드스튜디오범블비
  • codestate
  • 안드로이드스튜디오파이어베이스
  • linuix 코드스테이츠
  • 2609
  • 번들링
  • 웹팩
  • JavaScript
  • linux
  • 사용자 친화 웹
  • 자바스크립트
  • 알고리즘
  • 코플릿
  • css
  • DP
  • 파이어베이스연동
  • React
  • 생활코딩
  • 1292

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
LeeWang_31

이왕31

[코플릿]isSubsetOf
프론트엔드/코딩노트

[코플릿]isSubsetOf

2022. 11. 3. 15:06

코드스테이츠 과제 코드를 공부 목적으로 변형 해서 정리 하였습니다.

✅문제

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

 

⛔주의

  • base, sample 내에 중복되는 요소는 없다고 가정합니다.

 

💬입출력 예시

let base = [1, 2, 3, 4, 5];
let sample = [1, 3];
let output = isSubsetOf(base, sample);
console.log(output); // --> true

sample = [6, 7];
output = isSubsetOf(base, sample);
console.log(output); // --> false

base = [10, 99, 123, 7];
sample = [11, 100, 99, 123];
output = isSubsetOf(base, sample);
console.log(output); // --> false

 

🍀해결코드

const isSubsetOf = function (base, sample) {
    base.sort((a, b) => a - b)
    sample.sort((a, b) => a - b)
    
    const findIndex = (el, base, idx) => {
        for (let j = idx; j < base.length; j++) {
            if (el === base[j]) {
                return j
            } else if (el < base[j]) {
                return -1
            }
        }
        return -1
    }
    let idx = 0;
    for (let i = 0; i < sample.length; i++) {
        idx = findIndex(sample[i], base, idx)
        if (idx === -1) {
            return false
        }
    }
    return true
};

🦦해설

처음에 제출한 코드는 실행초과가 걸렸다.

단순하게 sample을 for문 돌려 base에 includes가 true인지만 확인했다

몰랐는데 includes는 실행 초과의 위험이 있다고 한다. 조심히 사용해야 할것같다.

 

아무튼 코드의 시간을 줄이기 위해 고민을 해보았다.

우선 sample과 base를  정렬한다.

sample의 i번째 요소가 base의 j번째 요소와 같다면, sample의 i+1번째요소는 j+1 이상 번째 에서 발견되거나, 존재하지 않는다.(smaple의 i+1번쨰 요소가 base있는지 확인할때는 처음부터가 아니라 j+1번째 부터 확인하면 된다.)

또한 발견이 안되는 요소가 있다면 그 즉시 실행을 종료하고 false를 출력한다.

저작자표시 (새창열림)

'프론트엔드 > 코딩노트' 카테고리의 다른 글

[백준]2839/설탕배달/JavaScript  (0) 2022.11.08
[코플릿]tiling  (0) 2022.11.03
[코플릿]bubbleShot  (0) 2022.11.03
[코플릿]fibonacci  (0) 2022.11.03
[코플릿]largestProductOfThree  (0) 2022.11.03
    '프론트엔드/코딩노트' 카테고리의 다른 글
    • [백준]2839/설탕배달/JavaScript
    • [코플릿]tiling
    • [코플릿]bubbleShot
    • [코플릿]fibonacci
    LeeWang_31
    LeeWang_31
    이왕 할 거면 기분 좋게

    티스토리툴바