[리트코드] 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의 경우처럼 객체로서 사용하는 것이 더 좋다고 생각한다.