[25일차] Use Frequency Counter Pattern or Multiple Pointers Pattern

저요·2022년 10월 17일

2022 100th day challenge

목록 보기
25/97

서론

당분간은 패턴을 응용해서 문제를 연습을 할 것 같다. 오늘은 어제의 Frequency Counter을 이용해서 문제를 풀어보고 추가로 Multiple Pointers 패턴을 이용해서도 문제를 풀어볼 것이다. 그렇게 하는 것으로 둘의 차이를 비교할 수 있을것이고 어떤 상황에 어떤 패턴이 더 적절한지 파악할 수 있을것이라 기대한다.

문제

Frequency Counter / Multiple Pointers - areThereDuplicates

Implement a function called, areThereDuplicates which accepts a variable number of arguments, and checks whether there are any duplicates among the arguments passed in. You can solve this using the frequency counter pattern OR the multiple pointers pattern.

Examples:

areThereDuplicates(1, 2, 3) // false
areThereDuplicates(1, 2, 2) // true 
areThereDuplicates('a', 'b', 'c', 'a') // true 

Restrictions:

Time - O(n)
Space - O(n)

Bonus:

Time - O(n log n)
Space - O(1)

해결책

본격적으로 들어가기 전에...

이 문제에서 areThereDuplicates는 파라미터의 숫자가 정해져 있지 않다. 때문에 어떤 파라미터가 들어오든 받아내는 가변인자함수로 구현해야한다. 가변인자함수를 구현하는 방법은 두 가지 있다. 하나는 함수 내부에서 arguments로 정의해 받아내는 것이고, 나머지 하나는 spread 연산자를 사용하는 것이다. 이곳에서의 풀이들은 모두 spread 연산자를 사용했다. 가변인자함수 구현에 대해서는 내일 더 자세히 이야기하고자 한다.

Frequency Counter 해결책

function areThereDuplicates(...args) {
  // good luck. (supply any arguments you deem necessary.)
  if(args === null || args.length < 0 ) return '계산불가';

    //객체 생성
    let lookup = {};
    
    //객체 안에 존재하면 return true 존재하지 않으면 1을 세팅
    for(let i = 0; i <args.length; i++){
        if(lookup[args[i]]){
            return true;
        }else{
            lookup[args[i]] = 1
        }
    }
    
    return false;
}

Multiple Pointers 해결책

function areThereDuplicates(...args) {
  // good luck. (supply any arguments you deem necessary.)
    let sortArr = args.sort();
    
    var firstPoint = 0; 
    var secondPoint = 1;
    
    for(let i = 0; secondPoint<sortArr.length; i++){
        if(sortArr[firstPoint] === sortArr[secondPoint]){
            return true;
        }else{
            firstPoint++;
            secondPoint++
    
        }
    
    }
    
    return false;


}

출처

https://www.udemy.com/share/105zfq3@gTlDCXbB797oGNvJ4dUM3xfA1o-GUYcsvbUyJEypMLstLllGA-Noxz70ytVc2ICeYg==/

profile
웹개발

0개의 댓글