49. Group Anagrams

2025. 10. 21. 22:00·Coding Test/LeetCode

난이도: 중간 (Medium)

링크: LeetCode 49

풀이 날짜: 2025/10/21

 

1. 문제 이해

입력:

strs = ["eat","tea","tan","ate","nat","bat"]

출력:

[["eat","tea","ate"],["tan","nat"],["bat"]]

 

문자 순서를 재배열해서 동일한 단어가 될 수 있는 문자열들을 하나의 그룹으로 묶는다. 즉, Anagram(아나그램) 들을 함께 모으는 문제다.

 

2. 접근 방식 — 정렬된 문자열(Key) 기반 해싱

두 문자열이 아나그램인지 확인하는 가장 간단한 방법은 다음과 같다: 문자열의 문자를 정렬했을 때 동일한 결과를 갖는지 비교한다.

 

예를 들어

 

  • "eat", "tea", "ate" → 모두 정렬 시 "aet"
  • "tan", "nat" → 모두 정렬 시 "ant"

이 규칙을 활용하면, 정렬된 문자열을 해시맵의 키(key) 로 사용하여 동일한 그룹에 묶을 수 있다.

 

3. 풀이 코드

/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function(strs) {
  const groupMap = {};

  for (const s of strs) {
    // 1.각 단어를 정렬하여 공통 키 생성
    const sorted = s.split('').sort().join('');

    // 2.해당 키가 없으면 새 그룹을 생성
    if (!groupMap[sorted]) {
      groupMap[sorted] = [];
    }

    // 3.동일 키에 단어 추가
    groupMap[sorted].push(s);
  }

  // 4.그룹들의 배열(map 의 값)만 반환
  return Object.values(groupMap);
};
구분 복잡도 설명
시간 복잡도 O(N × K log K) N: 단어 개수, K: 단어 평균 길이 (정렬 과정)
공간 복잡도 O(N × K) 그룹 저장 공간

 

4. 핵심 정리

개념 설명
문제 유형 HashMap, String Manipulation
핵심 아이디어 정렬된 문자열을 키로 사용해 동일한 아나그램 그룹화
시간 복잡도 O(N × K log K)
공간 복잡도 O(N × K)
포인트 “정렬된 문자열이 같으면 같은 그룹이다.” — 간단하지만 강력한 패턴

'Coding Test > LeetCode' 카테고리의 다른 글

20. Valid Parentheses  (0) 2025.10.22
128. Longest Consecutive Sequence  (0) 2025.10.21
57. Insert Interval  (0) 2025.10.20
56. Merge Intervals  (0) 2025.10.20
3. Longest Substring Without Repeating Characters  (0) 2025.10.19
'Coding Test/LeetCode' 카테고리의 다른 글
  • 20. Valid Parentheses
  • 128. Longest Consecutive Sequence
  • 57. Insert Interval
  • 56. Merge Intervals
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;)
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
        • Web Development
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • React
        • Next.js
        • Flutter
        • Testing
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test
        • LeetCode
        • Programmers
      • Tech Books & Lectures
        • Javascript_Modern JS Deep d..
        • Network_IT 엔지니어를 위한 네트워크 입문
      • Projects
        • PolyLingo_2025
        • Build Your Body_2024
        • JStargram_2021
        • Covid19 Tracker_2021
        • JPortfolio_2021
      • BootCamp_Codestates
        • TIL
        • TILookCloser
        • Pre Tech Blog
        • IM Tech Blog
        • Daily Issues and DeBugging
        • First Project
        • Final Project
        • Sprint Review
        • Good to Know
        • Socrative Review
        • HTML & CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 글쓰기
    • 관리
  • 공지사항

  • 인기 글

  • 태그

    이벤트
    Threads and Multithreading
    database
    DOM
    TCP/IP
    모던 자바스크립트 Deep Dive
    자바스크립트
    Network
    leetcode
    js pattern
    자바스크립트 딥다이브
    Binary Tree BFS
    How memory manage data
    Data Structure
    polylingo
    structure of os
    mobile app
    VoiceJournal
    커리어
    Javascript Essentials
    Time complexity and Space complexity
    스코프
    Shared resources
    프론트엔드 성능 최적화 가이드
    CPU scheduling algorithm
    need a database
    Operating System
    딥다이브
    indie hacker
    testing
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
49. Group Anagrams
상단으로

티스토리툴바