같은 알파벳으로 이루어진 단어끼리 묶기

miin·2022년 1월 7일
0

Algorithm

목록 보기
7/14
post-thumbnail

문제

다음과 같이 input이 주어졌을 때,같은 알파벳으로 이루어진 단어끼리 묶어주세요.

Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
output에서 순서는 상관없습니다.

코드

const groupAnagrams = strs => {
  const map = {}

  for(let i of strs){
    const key = [...i].sort().join('')//aet
    
    if(!map[key]){
      map[key] = [];
    }
    map[key].push(i)
 
  }
  return Object.values(map)
}
console.log(groupAnagrams(["eat", "tea", "tan", "ate", "nat", "bat"]));

풀이

  1. 최종 결과물이 담길 객체를 생성.
  2. 단어 배열을 한번만 순회하고, 각 단어를 이용하여, 키 값을 만든다.
  3. 키는 단어의 문자를 알파벳 순으로 정렬시킨 것. 따라서, 같은 알파벳으로 이루어진 단어의 경우 같은 키 값을 가진다.
  4. 결과 객체에 키가 없으면 값으로 빈 배열을 생성.
  5. 키에 해당하는 배열에 단어를 푸시.
  6. 순회가 끝나면, 각 키에는 같은 알파벳으로 이루어진 단어들의 배열이 담긴다. 따라서, 키 값만 모아주면 완성.

0개의 댓글