[j2h30728] WEEK 03 Solutions#2736
Conversation
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Two Pointers, Sorting, Greedy
- 설명: 3Sum 문제에서 정렬 후 투 포인터(left, right)로 순회하며 합이 0인 경우를 찾고 중복 제거를 위해 건너뛰는 방식으로 해결되므로 Two Pointers 패턴에 해당합니다. 추가로 정렬 자체가 중요한 역할을 하며, 탐색 중 합의 크기에 따라 포인터를 조절하는 점에서 Greedy 성격도 엿보입니다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n^2) | O(n^2) | ✅ |
| Space | O(1) | O(1) | ✅ |
피드백: 정렬과 이중 반복문으로 모든 서로 다른 삼중합을 찾는다. 중복 제거를 위한 조건이 포함되어 있어 중복 결과를 피한다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Dynamic Programming, Two Pointers
- 설명: 클라이밍 스탯 문제는 계단을 오르는 경우의 수를 이전 두 상태의 합으로 구하는 전형적인 DP 문제이며, 반복문으로 상태를 갱신하는 패턴이 확인됩니다. 또한 투 포인터처럼 현재와 이전 값을 관리하며 순차적으로 계산합니다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(n) | ✅ |
| Space | O(1) | O(1) | ✅ |
피드백: 상향식 DP로 이전 두 값을 굳이 변수로 유지해 공간을 상수로 사용했다.
개선 제안: 현재 구현이 적절해 보입니다.
📊 j2h30728 님의 학습 현황이번 주 제출 문제
누적 학습 요약
문제 풀이 현황
🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다. 🔢 API 사용량 (gpt-5-nano)
|
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Two Pointers, Dynamic Programming, Hash Map / Hash Set
- 설명: 왼쪽 곱과 오른쪽 곱을 각각 누적하며 각 위치의 곱을 구하는 방식으로 보통 두 포인터 혹은 누적 곱 패턴으로 해석됩니다. DP적 아이디어로 부분 결과를 합쳐 최종 값을 계산하며 추가 저장 공간을 활용합니다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(n) | ✅ |
| Space | O(n) | O(1) | ❌ |
피드백: 추가 배열 없이 결과를 만들기 위해 두 순회를 이용한다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Hash Map / Hash Set, Two Pointers
- 설명: 두 문자열의 문자를 해시맵으로 카운트하여 비교하는 방식으로, 한 번에 두 문자열의 문자를 서로 비교하고 전체 차이를 확인한다. 선형 시간, 선형 공간 복잡도로 구현되어 있다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(n) | ✅ |
| Space | O(n) | O(k) | ❌ |
피드백: 한 번의 순회와 맵 업데이트로 비교를 수행한다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Binary Search, Depth-First Search
- 설명: BST 유효성 검사에서 재귀로 트리를 탐색하며 각 노드의 값이 허용된 범위(min,max) 안에 있는지 확인합니다. 좌우 자식에 대해 범위를 점진적으로 좁혀 가는 방식은 Binary Search 및 DFS의 조합으로 볼 수 있습니다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(n) |
| Space | O(h) |
피드백: 각 노드를 방문하며 최소/최대 후보를 전달하는 방식.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Backtracking
- 설명: 가능한 수들의 조합을 재귀적으로 탐색하며 목표 합계에 도달할 때까지 후보를 추가/제외하는 방식으로 해를 구한다. 중간에 남은 합이 음수면 가지치기를 하고, 현재 선택을 되돌리며 모든 조합을 탐색한다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(k * n^k) | O(k * n^k) | ✅ |
| Space | O(k) | O(k) | ✅ |
피드백: 백트래킹으로 모든 조합을 탐색하며, 각 재귀에서 남은 합을 감소시키고 현재 경로를 관리합니다.
개선 제안: 현재 구현이 일반적인 해법에 부합합니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Dynamic Programming
- 설명: 문제의 해를 부분문제의 해의 합으로 구하는 전형적인 DP 패턴이며, 두 가지 경우를 합산하여 전체 해를 얻는 방식이다. 문자열의 부분 문자열을 상태로 삼아 중복 없이 계산한다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(n) | ✅ |
| Space | O(n) | O(n) | ✅ |
피드백: 이전 두 상태만 필요하므로 DP 배열을 사용해 풀이가 안정적입니다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Dynamic Programming, Greedy
- 설명: 연속 부분 배열의 합을 최대화하는 문제로, 부분해의 최댓값을 현재까지의 최댓값과 현재 값의 합으로 갱신하는 방식은 DP의 전형적인 형태이며, Kadane 알고리즘의 아이디어로도 설명됩니다. Greedy 성격의 선택도 포함됩니다.
📊 시간/공간 복잡도 분석
ℹ️ 이 파일에는 2가지 풀이가 포함되어 있어 각각 분석합니다.
풀이 1: maxSubArray1 — Time: ✅ O(n) → O(n) / Space: ✅ O(n) → O(n)
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(n) | ✅ |
| Space | O(n) | O(n) | ✅ |
피드백: Kadane 방식과 유사한 DP 접근으로 각 위치의 최댓값을 유지합니다.
개선 제안: 현재 구현이 적절해 보입니다.
풀이 2: maxSubArray2 — 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.
🏷️ 알고리즘 패턴 분석
- 패턴: Bit Manipulation, Greedy, Divide and Conquer
- 설명: 주어진 코드는 입력 n의 이진 자리수를 하나씩 확인해 비트를 세는 방식으로 1의 개수를 구한다. 비트 수를 순차적으로 처리하는 패턴과 간단한 수학적 분할을 이용하는 점에서 비트 조작 및 단순 루프 기반 접근으로 보인다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(number of bits) | ❌ |
| Space | O(1) | O(1) | ✅ |
피드백: 반복을 통해 비트 수를 직접 셉니다. 비트 연산으로도 최적화 가능.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Two Pointers, Hash Map / Hash Set
- 설명: 문자열 전처리 후 양 끝에서 같은지 비교하는 방식으로 가운데로 이동하며 비교하는 패턴으로, 두 포인터가 양끝에서 만나는 지점까지 진행합니다. 이때 불필요한 문자 제거와 소문자화 과정이 포함된 뒤 대칭 여부를 확인합니다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(n) | ✅ |
| Space | O(n) | O(n) | ✅ |
피드백: 문자 필터링과 문자열 재구성 후 대칭 비교로 해결합니다.
개선 제안: 현재 구현이 적절해 보입니다.
alphaorderly
left a comment
There was a problem hiding this comment.
전반적으로 깔끔하게 잘 해결하신것 같습니다!
parkhojeong
left a comment
There was a problem hiding this comment.
수고하셨습니다! 전체적으로 깔끔하게 잘 풀어주신 거 같네요.
커멘트 남겨보았습니다. valid-palindrome 은 통과가 안되는 상태라 request-changed 로 남겨두었습니다!
| let sum = 0; | ||
|
|
||
| while (n > 0) { | ||
| sum += Math.abs(n % 2); |
There was a problem hiding this comment.
abs 없이 sum += n % 2; 만 해줘도 될 거 같습니다!
| let string = ""; | ||
| for (const ch of s) { | ||
| if ((ch >= "a" && ch <= "z") || (ch >= "A" && ch <= "Z")) { | ||
| string += ch.toLowerCase(); | ||
| } | ||
| } |
There was a problem hiding this comment.
조건이 alphanumeric 인데 알파벳만 처리해서 테스트 통과가 안되네요! 다시 풀어주셔야 할 거 같아요~
답안 제출 문제
작성자 체크 리스트
In Review로 설정해주세요.검토자 체크 리스트
Important
본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!