Algorithm | Code Kata #18

Wook·2021년 12월 23일
0

Algorithm | Code Kata

목록 보기
18/21

각각의 단어의 이루어진 철자가 같으면 그 단어들을 grouping해주는 문제이다. 문제에 대한 접근은 우선 모든 단어를 sort()를 통해 정렬해주면 이루어지는 철자가 같다면 같은 단어가 형성되기 때문에 그러한 집단을 객체를 통해 grouping해주어 배열을 추출해주는 식으로 접근을 해보았다.


📲 My Code

const groupAnagrams = strs => {
  let sortedArr=[] 
  // strs의 요소들을 정렬해준 배열
  let newDictionary = {} 
  // 중첩되는 요소들을 key로 받는 객체, value는 글자가 같은 단어들
  let returnArr=[] 
  // 최종적 반환하는 배열, 마지막에 객체의 value들을 push해줌으로써 요소 형성

  for (let i=0; i<strs.length; i++)
  {
    sortedArr.push(strs[i].split('').sort())
    // 각 요소들을 글자단위로 쪼개서 정렬후 push
  }

  for (let i=0; i<sortedArr.length; i++)
  { 
    // newDictionary의 해당 키값이 undefined일 경우, 
    // sortedArr[i].join('')은 떨어진 글자를 단어로 합쳐줌
    if (!newDictionary[sortedArr[i].join('')])
    { 
      // 해당 객체의 밸류를 빈 배열로 선언후, 그 배열안에 해당 단어 push
      newDictionary[sortedArr[i].join('')]=[]
      newDictionary[sortedArr[i].join('')].push(strs[i])
    }
    // 이미 해당 객체 요소의 값이 선언되있는 경우(이전에 이미 만들어짐)
    else
    {
      newDictionary[sortedArr[i].join('')].push(strs[i])
    }
  }
 
  for (let key in newDictionary)
    {
      returnArr.push(newDictionary[key])
    }

  return returnArr
};




느낀 점

이번 문제는 접근을 정확히 하지 못한다면 많이 돌아갈 것이라는 생각을 했다. 그렇기에 처음에는 단순히 반복분만을 이용해 글자를 하나하나 뜯어보면서 비교해보았다. 그럴 경우, 이루어지는 글자가 같지만 그 글자를 포함하고 더 많은 글자가 형성된 단어들이랑도 비교 결과가 같다고 이루어지기에, 정렬을 통해 정렬후에도 단어가 일치할 경우로 비교를 하는게 훨씬 수월하다고 생각하여 코드를 바꿔서 풀었다. 그 결과 더 수월하게 문제 풀이를 진행할 수 있었다.

profile
지속적으로 성장하고 발전하는 진취적인 태도를 가진 개발자의 삶을 추구합니다.

0개의 댓글