본문 바로가기
Coding Test/LeetCode

[Javascript] (LeetCode) 49. Group Anagrams(Medium)

by Chaedie 2022. 9. 17.
728x90

[Javascript] (LeetCode) 49. Group Anagrams(Medium)

💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.

서론

  • 코드 카타에 해당 문제가 나왔는데, 완솔 하지 못하고 풀이를 보고 풀었네요!
  • 프로젝트 기간에 바빠서 카타는 안하고 뒤늦게 푸는 중인데 Medium 수준도 나오고 정말 좋네요 ㅎㅎ
  • (제 실력 대비) 어려운 문제 많이 풀어보면서 실력이 많이 늘었으면 좋겠습니다.

내 풀이 (풀다가 포기)

/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function(strs) {
  // 새로운 배열을 만들고, 
  // 객체에 알파벳 카운팅
  // 객체 비교 => 같은 놈들끼리 배열에 push
  // 모두 배열에 담아서 return 

  const checkArr = [];
  strs.forEach((str) => checkArr.push(countCharInStr(str)))
  console.log(checkArr)
  checkArr.forEach(obj => console.log(Object.entries(obj)))
  // console.log(Object.entries(checkArr));
};

function countCharInStr(str) {
  const countObj = {};
  for (let i = 0; i < str.length; i++) {
    countObj[str[i]] = (countObj[str[i]] || 0) + 1;
  }

  return countObj;
}

function hasEqualEntries() {

}
  • 객체를 이용해 각 str들의 알파벳 카운트까진 했다.
  • 하지만 배열 속 객체끼리 같은지 비교하는게 가능은 하지만 너무 번거롭고 시간복잡도상으로도 너무 오래걸린다는 생각을 했다.
  • 그래서 중간에 그냥 풀이를 멈추고 다른 사람의 풀이를 봤는데, 너무 깔끔해서 조금 놀랬다.

다른 사람 풀이 참고한 풀이

/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function(strs) {
  const result = {};
  for (let str of strs) {
    let sortedStr = str.split('').sort().join('');
    result[sortedStr] ? result[sortedStr].push(str) : result[sortedStr] = [str];

  }

  return Object.values(result)
};
  • strs에 있는 str을 뽑아서, sort 한다.
  • result Object에 sortedStr이 없으면 str을 담는 배열을 새로 만들고, 기존에 배열이 있으면 그 배열에 str을 push한다.
  • Object.values(result)를 통해 해당 Object의 밸류값들 (배열들) 만 배열에 담아서 return해준다.

배운 점, 느낀 점

  • 아나그램을 체킹할 떄 직접 완전탐색처럼 알파벳을 다 세어줄수도 있지만, sort해서 체크할수도있다.
    • 이전 ValidAnagram 문제에서는 갯수를 카운트해서 비교하는 식으로 했지만, 해당 방식을 한 문제에 다 밀어 넣기에는 코드상 무리가 있다는걸 깨닫게 되었다.
  • Object.values()를 쓰면 배열로 결과값이 나온다는걸 제대로 깨닫게 되었다. 다른 문제를 풀때 Object.values를 통해 for 문을 돌리는? 그런 형태를 사용해본것 같은데 배열에 밸류값들이 담긴다는게 머릿속에 남아있지 않은 상태였는데, return값을 확실히 알게 되었다.
  • FE개발을 하다보면 객체를 통해 데이터를 처리하는 경우가 엄청 많은데, Object관련된 내장 함수들을 제대로 파악하면 좋을것 같다. 문제풀이 많이 해봐야징. FE 시장에 코테 비중이 줄어들고 있지만 그래도 문제 풀이는 개발 실력에 도움이 되기에 꾸준히 하는게 맞는 것 같다.
    • 문제 풀이를 하다 보면 나의 부족한 코딩 실력이 처참하게 드러나는게 정말 좋은 점이다. 👍👍

댓글