[freemjstudio] WEEK 05 Solutions#2778
Conversation
|
문제를 추가로 하나 더 풀어서 다시 PR 올립니다. 확인 부탁드립니다! |
📊 freemjstudio 님의 학습 현황이번 주 제출 문제
누적 학습 요약
문제 풀이 현황
🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다. 🔢 API 사용량 (gpt-5-nano)
|
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Hash Map / Hash Set, Sorting
- 설명: 문자열을 정렬한 키로 해시 맵에 그룹화하여 애너그램을 묶는 방식으로 해결합니다. 해시맵으로 키-리스트 매핑을 관리하고 정렬은 그룹핑의 기준을 제공합니다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(n * k log k) |
| Space | O(n * k) |
피드백: 각 문자열을 길이 k로 정렬하는 비용이 주요 시간 복잡도를 구성한다. 해시맵에 키별로 단어를 모으는 과정도 포함된다.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Trie, Hash Map / Hash Set, Dynamic Programming
- 설명: Trie 구조를 이용해 문자열 단어를 효율적으로 삽입/검색하며, 각 문자 노드를 해시맵으로 관리한다. startsWith와 search가 공통 트라이 탐색 로직을 공유한다.
📊 시간/공간 복잡도 분석
ℹ️ 이 파일에는 3가지 풀이가 포함되어 있어 각각 분석합니다.
풀이 1: Trie.insert — Time: O(m) / Space: O(n * m)
| 복잡도 | |
|---|---|
| Time | O(m) |
| Space | O(n * m) |
피드백: 삽입 시 각 문자마다 새로운 노드를 만들 수 있어 공간은 단어의 총 길이에 비례한다.
개선 제안: 메모리 사용을 줄이고자 불필요한 중복 제거 또는 공유 구조를 고려해볼 수 있다.
풀이 2: Trie.search — Time: O(m) / Space: O(1)
| 복잡도 | |
|---|---|
| Time | O(m) |
| Space | O(1) |
피드백: 일치하는 경로가 없으면 즉시 False를 반환하고, 경로 존재 시 마지막 노드의 end 여부를 검사한다.
개선 제안: 루프 중간에 조기 종료가 가능하므로 평균 성능은 더 빠를 수 있다.
풀이 3: Trie.startsWith — Time: O(p) / Space: O(1)
| 복잡도 | |
|---|---|
| Time | O(p) |
| Space | O(1) |
피드백: 접두사 존재 여부를 빠르게 판단하는데 적합하다.
개선 제안: 추가 기능으로 prefix에 해당하는 단어 수를 반환하는 기능을 추가해도 좋다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
| anagrams = {} | ||
| for word in strs: | ||
| sorted_word = "".join(sorted(word)) | ||
| if sorted_word in anagrams: | ||
| anagrams[sorted_word].append(word) | ||
| else: | ||
| anagrams[sorted_word] = [word] |
There was a problem hiding this comment.
defaultdict 을 쓰거나 setdefault 같은 방식을 쓰면 if, else를 안쓰고도 가능할 거 같습니다.
| class Trie: | ||
|
|
||
| def __init__(self): | ||
| self.children = {} # 다음 문자(key) : 다음 문자에 해당하는 노드(value) | ||
| self.is_end = False # 현재 문자가 단어의 마지막인지 여부 |
There was a problem hiding this comment.
Trie가 마지막 여부를 가진다는게 어색하게 느껴지네요. 실제 의미는 루트 노드가 마지막인지를 담는 값인데 Trie 전체가 마지막인지(?)를 알려주는 값처럼 읽히네요. Node의 역할을 Trie에서도 해서 생기는 부분인데 Node 클래스를 이용해서 구현해보시면 좋을 거 같습니다.
답안 제출 문제
작성자 체크 리스트
In Review로 설정해주세요.검토자 체크 리스트
Important
본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!