[yuseok89] WEEK 06 Solutions - #2786
Conversation
📊 yuseok89 님의 학습 현황이번 주 제출 문제
누적 학습 요약
문제 풀이 현황
🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다. 🔢 API 사용량 (gpt-5-nano)
|
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Two Pointers, Greedy
- 설명: 두 포인터를 양쪽 끝에서 모아가며 넓이를 계산하고, 현 시점의 최적 값을 빠르게 판단하여 불필요한 탐색을 중단하는 방식으로 문제를 해결합니다. 최소 높이와 거리의 곱을 비교하며 포인터를 움직이는 점이 그리디 패턴과 부합합니다.
📊 시간/공간 복잡도 분석
ℹ️ 이 파일에는 2가지 풀이가 포함되어 있어 각각 분석합니다.
풀이 1: Solution.maxArea — Time: ✅ O(N) → O(n) / Space: ✅ O(1) → O(1)
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(N) | O(n) | ✅ |
| Space | O(1) | O(1) | ✅ |
피드백: 투 포인터를 사용해 최댓값을 갱신하고, 더 큰 높이를 가진 쪽으로 이동시키는 방식으로 중복 계산을 피한다.
개선 제안: 현재 구현이 적절해 보입니다.
풀이 2: maxArea — Time: ✅ O(N) → O(n) / Space: ✅ O(1) → O(1)
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(N) | O(n) | ✅ |
| Space | O(1) | O(1) | ✅ |
피드백: 좌우 포인터를 한 번씩만 이동하여 전체 배열을 한 번 스캔한다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Trie, Backtracking
- 설명: 트라이를 이용해 단어를 저장하고 검색하며, 점(.) 와일드를 재귀적으로 탐색하는 방식은 트라이 구조와 백트래킹(재귀 탐색) 패턴의 결합으로 볼 수 있습니다.
📊 시간/공간 복잡도 분석
ℹ️ 이 파일에는 2가지 풀이가 포함되어 있어 각각 분석합니다.
풀이 1: WordDictionary.addWord — Time: O(k) / Space: O(total_nodes)
| 복잡도 | |
|---|---|
| Time | O(k) |
| Space | O(total_nodes) |
피드백: 트라이 노드에 딕셔너리 기반 자식과 끝 표식을 사용해 검색을 빠르게 한다.
개선 제안: 현재 구현이 적절해 보입니다.
풀이 2: WordDictionary.search — Time: O(질문 문자열 길이) / Space: O(트리 깊이)
| 복잡도 | |
|---|---|
| Time | O(질문 문자열 길이) |
| Space | O(트리 깊이) |
피드백: 점진적으로 트라이를 따라가며 부분 매치를 탐색한다. 와일드카드 처리에 재귀를 사용한다.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Binary Search, Dynamic Programming
- 설명: 최장 증가 부분수열의 길이를 이분 탐색으로 관리하는 패턴으로, 기존 수열의 증가 부분수열 끝값을 배열에 유지하고 수를 삽입할 위치를 이분 탐색으로 찾는 방식이다. DP적 아이디어를 이분 탐색으로 최적화한 대표 사례다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(NlogN) | O(n log n) | ✅ |
| Space | O(N) | O(n) | ✅ |
피드백: tail 배열을 관리하며 각 원소를 적절한 위치에 대입한다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Two Pointers, Matrix Traversal
- 설명: 주어진 코드는 행렬을 시계 방향으로 한 바퀴씩 순회하며 원소를 수집합니다. 두 포인터(행/열)와 방향 전환을 이용한 순회 방식으로 패턴을 확인할 수 있습니다. 정확히는 공식 패턴 목록에 직접 대응하는 항목은 많지 않지만, Two Pointers와 Sliding Window의 아이디어에 해당하는 매 트레버셜 구조를 갖습니다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(N*M) | O(n*m) | ✅ |
| Space | O(N*M) | O(1) | ❌ |
피드백: 방향 전환과 경계 관리로 전체 원소를 한 번 순회한다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Stack / Hash Map, Greedy, Hash Map / Hash Set
- 설명: 괄호 짝을 스택에 쌓아 올리며 매칭 여부를 확인하는 전형적인 스택 패턴이다. 해시 맵으로 괄호 매핑 정보를 관리하고, 매 입력 문자에 대해 현재 스택의 최상단과 비교하여 유효성을 판단한다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(N) | O(n) | ✅ |
| Space | O(N/2) | O(n) | ❌ |
피드백: 여는 괄호를 스택에 push하고 닫는 괄호와 매칭 여부를 확인한다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
제 생각에 너무 좋은 코드인데요, Python의 타입 힌팅을 적극적으로 이제 활용해 보시면 코드의 가독성에 큰 긍정적 영향을 줄것이라고 생각해요!
특히 메서드를 추가 작성할때 input param들의 타입과 return type을 작성하면 개인적으로는 상당한 가독성의 향상이 있다고 생각합니다.
There was a problem hiding this comment.
아 물론 개인적 의견이니 꼭 하실 필요는 없습니다!!!
There was a problem hiding this comment.
와 이건 코드를 아트의 경지로 올리셨군요 ㄷㄷㄷ 대단하십니다.
배우고 갑니다!
| if c in pars: | ||
| stack.append(c) | ||
| else: | ||
| if len(stack) == 0 or pars.get(stack.pop(), '') != c: |
There was a problem hiding this comment.
if not stack or pars[stack.pop()] != c:
제 개인적인 생각으로는 이것으로 수정하면
not stack을 통해 스택이 비어있는 경우를 먼저 확인
단축 평가에 의해 stack이 비어 있으면 False를 리턴하기에 or의 뒤에 있는 부분은 실행시 stack에 값이 있음이 확실시 됩니다!
pars[stack.pop()] != c
이부분은 stack에 값이 있음이 확실시 되고, 어차피 닫는 기호는 스택에 들어가지 않기 때문에 스택 내부에는 여는 기호만 있는것이 확실시 되기 때문에 get과 기본값을 명시하는것이 크게 필요하지 않다는 생각이 들었습니다.
alphaorderly
left a comment
There was a problem hiding this comment.
전반적으로 깔끔한 풀이 잘 봤습니다!
| # TC: O(N*M) | ||
| # SC: O(N*M) | ||
| class Solution: | ||
| def spiralOrder(self, matrix: List[List[int]]) -> List[int]: |
There was a problem hiding this comment.
진짜 깔끔하게 푸셨네요. 리뷰하러 왔다가 배워갑니다..!!!
| else: | ||
| r -= 1 | ||
|
|
||
| return ans; |
There was a problem hiding this comment.
파이썬이니까 세미콜론은 없어도 될 것 같습니다 😄
| @@ -0,0 +1,16 @@ | |||
| # TC: O(N) | |||
| # SC: O(N/2) | |||
There was a problem hiding this comment.
공간복잡도를 O(N/2) 라고 생각하신 이유가 있을까요?
답안 제출 문제
작성자 체크 리스트
In Review로 설정해주세요.검토자 체크 리스트
Important
본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!