<코드타카 위크4 DAY 03.>

강민수·2021년 12월 26일
0

![https://velog.velcdn.com/images%2Fpeaceminusone%2Fpost%2F7e70a865-666c-477d-8a42-f80e9077c99e%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-12-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.39.08.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fpeaceminusone%2Fpost%2F7e70a865-666c-477d-8a42-f80e9077c99e%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-12-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.39.08.png)

각각의 단어의 이루어진 철자가 같으면 그 단어들을 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개의 댓글