[리트코드] 49. Group Anagrams




49. Group Anagrams

리트코드

나의 풀이

/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function (strs) {
  let hash = {};
  for (let i = 0; i < strs.length; i++) {
    let sorted = [...strs[i]].sort().join('');
    hash[sorted] ? hash[sorted].push(strs[i]) : (hash[sorted] = [strs[i]]);
  }
  return Object.values(hash);
};


문자열을 sort하여 hash를 만들었다.

Runtime: 120 ms, faster than 94.90% of JavaScript online submissions for Group Anagrams.




hash 사용없이 배열로 풀기

/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function (strs) {
  let arr = [];
  for (let i = 0; i < strs.length; i++) {
    let sorted = [...strs[i]].sort().join('');
    arr[sorted] = arr[sorted] ? [...arr[sorted], strs[i]] : [strs[i]];
  }
  console.log(arr);
  //   [ aet: [ 'eat', 'tea', 'ate' ], ant: [ 'tan', 'nat' ], abt: [ 'bat' ] ]
  return Object.values(arr);
};

console.log(groupAnagrams(['eat', 'tea', 'tan', 'ate', 'nat', 'bat']));

배열의 프로퍼티로 sorted를 줘서 배열을 마치 hash 처럼 사용했다.
배열도 객체처럼 key-value 형태로 사용하는 경우를 실제로 처음 본 것 같다.
(배열이 사실 hash로 이루어진 희소배열이란건 알고 있었지만🤓)
하지만 어차피 배열을 객체처럼 사용할 것이라면 더 가독성 좋게 1의 경우처럼 객체로서 사용하는 것이 더 좋다고 생각한다.