Skip to content

[freemjstudio] WEEK 05 Solutions#2778

Merged
parkhojeong merged 2 commits into
DaleStudy:mainfrom
freemjstudio:freemjstudio-week05-extra
Jul 27, 2026
Merged

[freemjstudio] WEEK 05 Solutions#2778
parkhojeong merged 2 commits into
DaleStudy:mainfrom
freemjstudio:freemjstudio-week05-extra

Conversation

@freemjstudio

Copy link
Copy Markdown
Contributor

답안 제출 문제

작성자 체크 리스트

  • Projects의 오른쪽 버튼(▼)을 눌러 확장한 뒤, Week를 현재 주차로 설정해주세요.
  • 문제를 모두 푸시면 프로젝트에서 StatusIn Review로 설정해주세요.
  • 코드 검토자 1분 이상으로부터 승인을 받으셨다면 PR을 병합해주세요.

검토자 체크 리스트

Important

본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!

  • 바로 이전에 올라온 PR에 본인을 코드 리뷰어로 추가해주세요.
  • 본인이 검토해야하는 PR의 답안 코드에 피드백을 주세요.
  • 토요일 전까지 PR을 병합할 수 있도록 승인해주세요.

@freemjstudio

Copy link
Copy Markdown
Contributor Author

문제를 추가로 하나 더 풀어서 다시 PR 올립니다. 확인 부탁드립니다!

@dalestudy

dalestudy Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

📊 freemjstudio 님의 학습 현황

이번 주 제출 문제

문제 난이도 유형 분석
group-anagrams Medium ✅ 의도한 유형
implement-trie-prefix-tree Medium ✅ 의도한 유형

누적 학습 요약

  • 풀이한 문제: 14 / 75개
  • 이번 주 유형 일치율: 100% (2문제 중 2문제 일치)

문제 풀이 현황

카테고리 진행도 완료
Array ■■■■□□□ 5 / 10 (Easy 3, Medium 2)
Heap ■■□□□□□ 1 / 3 (Medium 1)
Dynamic Programming ■■□□□□□ 3 / 11 (Medium 3)
Matrix ■■□□□□□ 1 / 4 (Medium 1)
Binary ■□□□□□□ 1 / 5 (Easy 1)
Linked List ■□□□□□□ 1 / 6 (Easy 1)
String ■□□□□□□ 1 / 10 (Easy 1)
Tree ■□□□□□□ 1 / 14 (Easy 1)
Graph □□□□□□□ 0 / 8 ← 아직 시작 안 함
Interval □□□□□□□ 0 / 5 ← 아직 시작 안 함

🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다.

🔢 API 사용량 (gpt-5-nano)
요청 입력 토큰 출력 토큰 합계 비용
1 864 111 975 $0.000088

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

  • 패턴: Hash Map / Hash Set, Sorting
  • 설명: 문자열을 정렬한 키로 해시 맵에 그룹화하여 애너그램을 묶는 방식으로 해결합니다. 해시맵으로 키-리스트 매핑을 관리하고 정렬은 그룹핑의 기준을 제공합니다.

📊 시간/공간 복잡도 분석

복잡도
Time O(n * k log k)
Space O(n * k)

피드백: 각 문자열을 길이 k로 정렬하는 비용이 주요 시간 복잡도를 구성한다. 해시맵에 키별로 단어를 모으는 과정도 포함된다.

개선 제안: 현재 구현이 적절해 보입니다.

💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

  • 패턴: 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에 해당하는 단어 수를 반환하는 기능을 추가해도 좋다.

💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!

@parkhojeong parkhojeong left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다.

Comment on lines +7 to +13
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]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

defaultdict 을 쓰거나 setdefault 같은 방식을 쓰면 if, else를 안쓰고도 가능할 거 같습니다.

Comment on lines +3 to +7
class Trie:

def __init__(self):
self.children = {} # 다음 문자(key) : 다음 문자에 해당하는 노드(value)
self.is_end = False # 현재 문자가 단어의 마지막인지 여부

@parkhojeong parkhojeong Jul 26, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Trie가 마지막 여부를 가진다는게 어색하게 느껴지네요. 실제 의미는 루트 노드가 마지막인지를 담는 값인데 Trie 전체가 마지막인지(?)를 알려주는 값처럼 읽히네요. Node의 역할을 Trie에서도 해서 생기는 부분인데 Node 클래스를 이용해서 구현해보시면 좋을 거 같습니다.

@parkhojeong
parkhojeong merged commit 4513dd2 into DaleStudy:main Jul 27, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: Completed

Development

Successfully merging this pull request may close these issues.

2 participants