stack으로 시도해보려다가 실패하고,
반복문의 인덱스로 currentSortedChar와 nextSortedChar로 해결해보려고 하다가 실패하고....
map 구조를 떠올렸지만 key-value를 잘못 설정해서 실패했다.
너가 시도했던 3차 방법은 좋은 방향으로 가고 있었지만, 몇 가지 핵심 아이디어가 빠져 있어서 완성까지 연결되기 어려웠던 방식이에요. 어떤 점이 부족했고, 어떻게 보완하면 쓸 수 있었는지 자세히 설명해줄게요.
🔍 너의 3차 시도 핵심 분석
for (let i = 0; i < strs.length; i++) {
const currentSortedChar = strs[i].split("").sort().join("")
console.log("currentSortedChar", currentSortedChar)
arr.push()
...
}
strs[i].split("").sort().join("")으로 정렬 문자열을 만들고 있음 → 아주 잘했음.❌ 부족했던 부분
3. 이중 비교 (strs[i],strs[i+1]) 방식은 정렬되지 않은 입력에서는 잘 작동하지 않음
예:["eat", "tea", "tan", "ate", "nat", "bat"]처럼 순서가 섞여 있는 경우
var groupAnagrams = function (strs) {
// anagram인 것들끼리 그룹으로 묶어서 리턴
// "any order" 라고 했으니 sort 쓰면 될듯
const map = new Map()
for (const str of strs) {
const sortedStr = str.split("").sort().join("")
if (map.has(sortedStr)) {
map.get(sortedStr).push(str)
} else {
map.set(sortedStr, [str])
}
}
return Array.from(map.values())
};
| 패턴 | 설명 | 예시 문제 |
|---|---|---|
| 해시맵 기반 그룹핑 | 기준을 정해서 같은 그룹으로 묶기 | Group Anagrams |
| 문자열 정렬 후 비교 | 문자열의 문자 조합을 판별하기 | Valid Anagram |
| Map with array values | 한 key에 여러 값 쌓기 | Find Duplicate File in System |
| 문자 카운트 배열로 key 만들기 | 정렬 대신 문자 수를 key로 사용 | Group Anagrams (Optimized) |
애너그램이라서 sort, 저장을 key-value로 해야할 것 같아 Map 자료구조를 떠올렸다니 기특하다!
(틀렸지만)
key-value로 해야겠다는 생각을 한 것도 잘했어
(틀렸지만)
조금 더 깊게 생각해보자.
종이와 펜으로 내가 원하는 인풋 - 처리과정 - 아웃풋을 그려보는게 좋겠다.