본문 바로가기

IT/Algorithm(알고리즘)

Frequency Counter1(서로의 숫자 빈도수가 맞는지 확인)

1. sameFrequency라는 함수를 만드십시오. 2개의 정수에서 서로 같은 빈도수와 숫자가 같은 확인하는 함수를 만드십시오. 해답에서는 시간 복잡도가 O(N)이어야 합니다. 

 <해답 결과 예시>

   sameFrequency(182, 281) // true

   sameFrequency(35989578, 5879385) // true

   sameFrequency(288, 134) // false

 

해답

function sameFrequency(num1, num2){

  let strNum1 = num1.toString();

  let strNum2 = num2.toString();

 

  if(strNum1.length !== strNum2.length){

    return false;

  }

 

  let countNum1 = {};

  let countNum2 = {};

 

  for(let i = 0; i < strNum1.length; i++){

    countNum1[strNum1[i]] = (countNum1[strNum1[i]] || 0) + 1;

  }

 

  for(let j = 0; j < strNum2.length; j++){

     countNum2[strNum2[j]] = (countNum2[strNum2[j]] || 0) + 1;

  }

 

  for(let key in countNum1){

    if(countNum1[key] !== countNum2[key]{

      return false;

    }

  }

  

  return true;

}

 

2. 두개의 배열을 받는 same이라는 함수를 만드시오. 첫 번째의 배열에 있는 요소들을 제곱을 했을때 해당하는 두 번째 배열의 요소들과 모두 일치하면 true로 반납하고 그것이 아니면 false로 반납해야 한다. 두 배열의 빈도 수는 동일해야 한다.

 

  <해답 결과 예시>

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

    same([1,2,3], [1,9]) // false

    same([1,2,1], [4,4,1]) // false (같은 빈도수여야 한다)

 

해답

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){

    // frequncyCounter1에서 제곱을 했을때 frequencyCounter2에 key값이랑 일치하는지 확인

    if(!(key**2 in frequencyCounter2)){

      return false;

    } // end of if statement

 

    // freqeuncyCounter2에서 key의  value값(frequencyCounter1의  key임)이 frequencyCounter1의 key의 value값이

    // 일치하는지 확인

    if(frequencyCounter2[key**2] !== frequencyCounter1[key]){

      return false

    } // end of if statement

 

  } // end of for statement frequencyCounter1

 

  return true

}

 

same([1,2,3], [4,1,9])