[codekata]Week4_Day3

문제

다음과 같이 input이 주어졌을 때,같은 알파벳으로 이루어진 단어끼리 묶어주세요. output에서 순서는 상관없습니다.

Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]


풀이

const groupAnagrams = strs => {
  const keysObj = {};

  for (let str of strs) {
    const key = [...str].sort().join('');

    if (keysObj[key] === undefined) {
      keysObj[key] = [];
    }
    keysObj[key].push(str);
  }

  return Object.values(keysObj);
};
  1. 변수 keysObj를 선언하고 빈 객체 저장
  2. 같은 알파벳으로 이루어진 문자열인지 비교하기 위해 인자로 받은 배열을 순회하면서 각 문자열마다 아래의 과정 반복👇
    1) 문자열을 구성하는 알파벳을 유니코드 포인트 순서로 정렬
    2) keysObj에 정렬된 알파벳을 key로 추가
    3) 해당하는 key의 값인 배열에 원본 문자열을 push
  3. keysObj 객체의 values 반환


기억할것✍️

객체에 key를 활용해서 요소 추가하기

const object = {};

  for (let element of elements) {

    if (object[key] === undefined) {
      object[key] = [];
    }
    object[key].push(element);
  }