[알고리즘] 배열 안의 요소 비교

2022. 11. 2. 09:49·개발/알고리즘
728x90
반응형

문제

A와 B 배열이 있는데 B배열안의 요소들이 A배열 요소들의 제곱값인지 판별하는 함수를 만들어야한다.

예를 들면

same([1,2,3,2,5], [9,1,4,4,11]) // false
same([1, 2, 3, 2], [9, 1, 4, 4]) // true

 

(1) 1번 풀이

function same(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }
  for (let i = 0; i < arr1.length; i++) {
    let correctIndex = arr2.indexOf(arr1[i] ** 2);
    if (correctIndex === -1) {
      return false;
    }
    arr2.splice(correctIndex, 1);
  }
  return true;
}

문제는 풀리지만 for문안에 splice를 써서 시간복잡도가 O(n^2)이다.

 

 

(2) 2번 풀이

function same(arr1, arr2){
    if(arr1.length !== arr2.length){
        return false;
    }
    let frequencyCounter1 = {}
    let frequencyCounter2 = {}
    for(let val of arr1){
        frequencyCounter1[val] = (frequencyCounter1[val] || 0) + 1
    }
    for(let val of arr2){
        frequencyCounter2[val] = (frequencyCounter2[val] || 0) + 1        
    }
    for(let key in frequencyCounter1){
        if(!(key ** 2 in frequencyCounter2)){
            return false
        }
        if(frequencyCounter2[key ** 2] !== frequencyCounter1[key]){
            return false
        }
    }
    return true
}

객체를 사용해서 시간복잡도를 O(n)으로 낮췄다.

 

 

728x90
반응형

'개발 > 알고리즘' 카테고리의 다른 글

[알고리즘] 다중 포인터  (0) 2022.11.02
[알고리즘] anagram  (0) 2022.11.02
[알고리즘] 알고리즘 문제 풀이 순서  (0) 2022.11.02
[코딩테스트] 프로그래머스 문제모음  (0) 2022.11.02
[코딩테스트] 프로그래머스 문제 모음  (0) 2022.10.11
'개발/알고리즘' 카테고리의 다른 글
  • [알고리즘] 다중 포인터
  • [알고리즘] anagram
  • [알고리즘] 알고리즘 문제 풀이 순서
  • [코딩테스트] 프로그래머스 문제모음
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    erc20
    html
    CSS
    블록체인
    go
    mysql
    명령어
    node
    30일챌린지
    하이퍼레저
    React
    go언어
    js
    컨테이너
    nodejs
    도커
    node.js
    30일 챌린지
    프로그래머스
    ERC721
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[알고리즘] 배열 안의 요소 비교
상단으로

티스토리툴바