[codekata]Week4_Day3
문제
다음과 같이 input이 주어졌을 때,같은 알파벳으로 이루어진 단어끼리 묶어주세요. output에서 순서는 상관없습니다.
Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
풀이
const groupAnagrams = strs => {
const keysObj = {};
for (let str of strs) {
const key = [...str].sort().join('');
if (keysObj[key] === undefined) {
keysObj[key] = [];
}
keysObj[key].push(str);
}
return Object.values(keysObj);
};
- 변수 keysObj를 선언하고 빈 객체 저장
- 같은 알파벳으로 이루어진 문자열인지 비교하기 위해 인자로 받은 배열을 순회하면서 각 문자열마다 아래의 과정 반복👇
1) 문자열을 구성하는 알파벳을 유니코드 포인트 순서로 정렬
2) keysObj에 정렬된 알파벳을 key로 추가
3) 해당하는 key의 값인 배열에 원본 문자열을 push - keysObj 객체의 values 반환
기억할것✍️
객체에 key를 활용해서 요소 추가하기
const object = {};
for (let element of elements) {
if (object[key] === undefined) {
object[key] = [];
}
object[key].push(element);
}