신입 개발자에서 시니어 개발자가 되기까지

Anagrams 본문

javascript/[Udemy] algorithm & data structure

Anagrams

Jin.K 2022. 9. 2. 08:52

Anagrams 이란?

- 하나의 문자를 재배열해서 만들어진 새로운 단어. 재배열된 문자는 원래 문자의 모든 글자를 사용해야 한다.

문제

    a. 두 문자열을 받아 character의 빈도수가 같은 지를 판단해서 boolean값을 반환하는 함수 만들기
        § 예시

문제를 풀면서 알게 된 점

    a. string은 for in이 아니라 for of문을 사용해야 한다. for in 문을 사용하면 object의 key값으로 string의 index가 들어가게 됨. 내가 필요한 것은 string의 각 character 이므로 for of 문을 사용해야 한다.

코드

function validAnagram(str1, str2) {
  if (str1.length !== str2.length) {
    return false;
  }
  const obj1 = {};
  const obj2 = {};
  for (let str of str1) {
    obj1[str] = (obj1[str] || 0) + 1;
  }
  //obj2는 만들 필요 없었음.
  //   for (let i = 0; i < str2.length; i++) {
  //     let letter = str2[i];
  // obj1이 존재하지 않거나 값이 0이면 false를 반환하고, 아니면 1을 뺀다.
  //     if (!obj1[letter]) {
  //       return false;
  //     } else {
  //       obj1[letter] -= 1;
  //     }
  //   }
  // 이렇게 str2과 obj1만을 이용해서 바로 답을 도출할 수 있음.
  for (let key of str2) {
    obj2[key] = (obj2[key] || 0) + 1;
  }
  for (let key in obj1) {
    if (!(key in obj2)) {
      return false;
    }
    if (obj2[key] !== obj1[key]) {
      return false;
    }
  }
  return true;
}