[togo26] WEEK 03 Solutions#2723
Conversation
Co-authored-by: Hojeong Park <parkhj062@gmail.com>
📊 togo26 님의 학습 현황이번 주 제출 문제
누적 학습 요약
문제 풀이 현황
🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다. 🔢 API 사용량 (gpt-5-nano)
|
dahyeong-yun
left a comment
There was a problem hiding this comment.
실패 케이스까지 꼼꼼하게 적어주셔서 저도 공부가 많이 되었습니다! 3주차도 고생하셨어요 :)
| * @return {number} | ||
| */ | ||
|
|
||
| // TLE |
There was a problem hiding this comment.
시도한 코드까지 정리해 두는 꼼꼼함..! 저도 배워갑니다 👍🏼👍🏼
| for (let i = start; i < candi.length; i++) { | ||
| const newAcc = acc + candi[i]; | ||
| const newCombi = [...combi, candi[i]]; | ||
| if (newAcc > target) break; |
There was a problem hiding this comment.
정렬을 추가해서 연산 수를 줄이는 것도 좋은 아이디어네요 👍
| for (let i = start; i < candi.length; i++) { | ||
| const newAcc = acc + candi[i]; | ||
| const newCombi = [...combi, candi[i]]; | ||
| if (newAcc > target) break; |
There was a problem hiding this comment.
애초에 정렬을 해서 불필요한 탐색을 줄이는 방법이 있네요 👍🏼
|
|
||
| // Log-based calculation | ||
| // TC: O(1) / SC: O(1) | ||
| // 비트 제약이 없을 경우 -> TC: O(logn) / SC: O(logn) |
There was a problem hiding this comment.
덕분에 저도 자료형의 허용 범위 이상인 경우를 생각해봐야 한다는 걸 느꼈어요 👍🏼
There was a problem hiding this comment.
O(n³)부터 O(n²), O(n)까지 모든 풀이를 남겨주셔서 시간 복잡도가 개선되는 과정이 잘 보여 인상 깊었습니다!
Remove unnecessary regex construction Co-authored-by: polymorph <33543196+dahyeong-yun@users.noreply.github.com>
Remove redundant code range validation Co-authored-by: polymorph <33543196+dahyeong-yun@users.noreply.github.com>
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Backtracking, Depth-First Search, Greedy
- 설명: 백트래킹으로 모든 조합을 탐색하고, 목표값(target)에 도달하면 해를 추가합니다. 오름차순 정렬 후 누적합이 target을 넘으면 더 탐색을 중단하는 가지치기(pruning)로 DFS를 사용합니다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(C^(T/m)) | O(k * n^k) | ❌ |
| Space | O(T/m) | O(target 깊이) | ❌ |
피드백: 정렬된 후보를 이용해 불필요한 경로를 조기에 차단하고, 같은 후보를 재사용하여 조합을 구성한다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Dynamic Programming, Hash Map / Hash Set, Bit Manipulation
- 설명: 문제는 문자열의 각 위치에서 한 글자 또는 두 글자를 해석해 경우의 수를 누적하는 DP 접근이다. memo 배열로 중복 계산을 피하는 구조가 DP의 핵심이며, 코드 맵은 dp 상태를 캐싱하기 위한 해시 맵을 활용한다.
📊 시간/공간 복잡도 분석
ℹ️ 이 파일에는 2가지 풀이가 포함되어 있어 각각 분석합니다.
풀이 1: numDecodings — Time: ✅ O(n) → O(n) / Space: ✅ O(n) → O(n)
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(n) | ✅ |
| Space | O(n) | O(n) | ✅ |
피드백: 가능한 한도에서 중복 부분 문제를 피하며 재귀 호출에 대한 결과를 저장한다.
개선 제안: 현재 구현이 적절해 보입니다.
풀이 2: numDecodings — Time: ✅ O(n) → O(n) / Space: ✅ O(n) → O(n)
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(n) | ✅ |
| Space | O(n) | O(n) | ✅ |
피드백: 입력 문자열 길이에 따라 선형적으로 동작하며 중복 계산을 피한다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Greedy, Dynamic Programming
- 설명: 카데인 알고리즘으로 알려진 최대 부분 배열 문제 풀이로, 현재 값을 비교해 누적합을 업데이트하고 전체 최댓값을 갱신합니다. 이는 최적해를 한 번의 선형 순회로 얻는 Greedy + DP 성격의 패턴에 해당합니다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(n) | ✅ |
| Space | O(n) | O(1) | ❌ |
피드백: 이전 누적값과 현재 값을 비교해 최적의 부분해를 갱신한다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Bit Manipulation, Greedy, Divide and Conquer
- 설명: 주 코드의 핵심은 이진수를 다루는 비트 연산(Bit Manipulation)을 통해 1의 개수를 구하는 패턴이다. 일부 구현은 로그 기반 탐색과 반복 감소로 구성되며, 대표적으로 비트를 제거하는 n & (n-1) 기법이 있다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(logn) | O(1) | ❌ |
| Space | O(logn) | O(1) | ❌ |
피드백: 비트 카운트는 다양한 구현이 가능하나 주석에 따라 방법이 다름.
개선 제안: 현재 구현들이 모두 동일한 문제를 해결하므로 하나를 선택해 일관성 있게 유지하는 것이 좋습니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Two Pointers, Greedy
- 설명: 두 포인터(left, right)를 사용해 문자열의 양쪽에서 비교하는 구간 탐색 방식이 핵심이며, 공통적으로 부분 문자열 비교를 통해 조건을 만족하는지 판단합니다. 또한 직접적인 최적화 없이 대칭 비교를 통해 문제를 해결하는 점에서 그리디적 기법과도 연결됩니다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(n) | ✅ |
| Space | O(n) | O(1) | ❌ |
피드백: 정규식 제거/두 포인터 방식으로 불필요한 문자열 생성 없이 해결한다.
개선 제안: 현재 구현이 적절해 보입니다.
답안 제출 문제
작성자 체크 리스트
In Review로 설정해주세요.검토자 체크 리스트
Important
본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!