[알고리즘] Frequent Counter : Anagram

Jade·2023년 2월 7일
1

알고래즘

목록 보기
17/20
post-thumbnail

💡 Frequency Counter - validAnagram

validAnagram이라는 함수는 두 문자열을 파라미터로 받아서 두 문자열이 애너그램 관계인지 확인하여 true, false를 반환하는 함수이다.

(알파벳은 소문자인 경우만 고려할 것)

예시
validAnagram('', '') // true
validAnagram('aaz', 'zza') // false
validAnagram('anagram', 'nagaram') // true
validAnagram("rat","car") // false) // false



💡 Solution

function validAnagram(first, second){
    if(first.length !== second.length){
        return false;
    }
  const firstObj = {};
  const secondObj = {};
  
  for(let val of first){
    firstObj[val] = (firstObj[val]||0)+1;
  }
  for(let val of second){
      secondObj[val] = (secondObj[val]||0)+1;
  }
  
  for(let key in firstObj){
      if(!secondObj[key]){
          return false;
      }
      if(secondObj[key] !== firstObj[key]){
          return false;
      }
  }
  return true;
}


💡 insight

  • 두 개의 루프가 두 개의 중첩된 개별 루프보다 더 나은 빅O 복잡성 측면에서 더 나은 방법.
//만약 앞의 문제를 다음과 같이 풀었다면 
//1000개인 경우에 1000*1000 만큼의 계산이 필요하나
//solution 대로 풀면 1000 + 1000 의 계산만 하면 된다 

function same (first, second){
  if(first.length !== second.length){
    return false;
  }
  
  for(let i=0;i<first.length;i++){
    let correctIdx = second.indexOf(first[i])
    //indexOf는 여기서 중첩된 루프의 역할을 하고 있음 
    if(correctIdx === -1){
      return false;
    }
    second.splice(correctIdx,1);
  }
  return true;
}
  • 오랜만에 알고리즘 문제 푸니까 for-of, for-in문도 생소하게 느껴지네 😂
  • Frequent counter 유형은 이렇게 객체를 이용해서 배열, 문자열을 분석하는 유형이다.


출처 Udemy JavaScript 알고리즘 & 자료구조 마스터클래스

profile
키보드로 그려내는 일

0개의 댓글