[Zero-1016] WEEK 02 solutions#2694
Conversation
📊 Zero-1016 님의 학습 현황이번 주 제출 문제
누적 학습 요약
문제 풀이 현황
🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다. 🔢 API 사용량 (gpt-5-nano)
|
|
|
||
| // 문자열 s와 t의 빈도수를 비교 | ||
| for (const [key, value] of sMap) { | ||
| if (value !== tMap.get(key) || !tMap.has(key)) return false; |
There was a problem hiding this comment.
혹시 has() 체크가 없어도 동작하지 않을까요? key가 없을 때 get()은 undefined를 반환하고, value는 number이므로 value !== undefined가 true가 되어 return false가 반환될 것 같습니다. 조건을 하나 줄이면 더 간결해질 것 같아서 의견드려봅니다.
There was a problem hiding this comment.
해당 부분 간결하게 수정이 가능했네요 확인 감사합니다 :) refactor: has 검사 제거 리뷰 반영
|
|
||
| const dp = new Array(n).fill(0); | ||
|
|
||
| dp[0] = 1; |
There was a problem hiding this comment.
dp[i]가 0부터 시작하다보니, 마치 0개 계단의 경우 1칸 이동을 나타내는 것처럼 느껴집니다.
저도 인덱스를 0부터 자주 사용하는데요. 이 경우, 인덱스를 1부터 사용하면 dp[i] = i칸 계단의 답으로 읽혀 더 직관적이고, base case 설정에 따라 early return도 자연스럽게 제거할 수 있을 것 같다는 의견을 드려봅니다..!
There was a problem hiding this comment.
의견 감사합니다! 사실 저도 dp[1] 부터 사용하는걸 생각하긴 했는데요. dp[0]을 비워두면 실제로 쓰이지 않는 값이 배열에 남는 게 어색해서, 슬롯을 전부 의미 있게 채우는 쪽(dp[i] = i+1칸의 답)으로 작성했어요. 공간 차이는 미미하지만, "배열의 모든 원소가 유효한 답"이라는 일관성을 유지하고 싶었습니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Two Pointers, Sorting
- 설명: 코드는 정렬 후 두 포인터(left, right)를 사용해 삼중합의 합이 0이 되도록 탐색합니다. 중복 제거를 위해 같은 값 건너뛰기 로직도 포함되어 있어 투 포인터 패턴이 핵심입니다.
📊 시간/공간 복잡도 분석
ℹ️ 이 파일에는 5가지 풀이가 포함되어 있어 각각 분석합니다.
풀이 1: threeSum — Time: ✅ O(n²) → O(n^2) / Space: ❌ O(log n) → O(1)
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n²) | O(n^2) | ✅ |
| Space | O(log n) | O(1) | ❌ |
피드백: 정렬과 투 포인터를 이용해 모든 3합을 찾고, 중복을 양 끝에서 건너뛰는 방식으로 제거합니다.
개선 제안: 현재 구현이 적절해 보입니다.
풀이 2: climbStairs — Time: ❌ O(n²) → O(n) / Space: ❌ O(log n) → O(n)
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n²) | O(n) | ❌ |
| Space | O(log n) | O(n) | ❌ |
피드백: 앞선 두 수의 합으로 현재의 경우의 수를 구하는 일반적인 DP 풀이입니다.
개선 제안: 현재 구현이 적절해 보입니다.
풀이 3: productExceptSelf — Time: ❌ O(n²) → O(n) / Space: ❌ O(log n) → O(1)
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n²) | O(n) | ❌ |
| Space | O(log n) | O(1) | ❌ |
피드백: 두 방향 누적곱으로 모든 원소의 곱을 구하는 표준 풀이입니다.
개선 제안: 현재 구현이 적절해 보입니다.
풀이 4: isAnagram — Time: ❌ O(n²) → O(n) / Space: ❌ O(log n) → O(1)
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n²) | O(n) | ❌ |
| Space | O(log n) | O(1) | ❌ |
피드백: 두 맵을 사용해 빈도수를 비교하되, 배열 기반 카운트가 더 빠르고 간결합니다.
개선 제안: 현재 구현이 적절해 보입니다.
풀이 5: isValidBST — Time: O(n) / Space: O(n)
| 복잡도 | |
|---|---|
| Time | O(n) |
| Space | O(n) |
피드백: 각 노드에 대해 유효한 범위를 추적하는 표준 방식입니다.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
제가 작성한 복잡도랑 다르게 표기가 되어있네요 :(
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Dynamic Programming
- 설명: 클라이밍 스탯 문제는 각 계단 수를 두 가지 방법으로 오르는 경우의 합으로 누적 최댓값을 구하는 전형적인 DP 문제이며, 점화식으로 순서를 계산합니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Two Pointers, Hash Map / Hash Set
- 설명: 왼쪽과 오른쪽에서 곱을 누적하는 방식으로 각 원소를 제외한 곱을 구하므로 두 포인터처럼 양 방향으로 누적하는 아이디어가 보이고, 직접적인 해시 자료구조의 사용은 없지만 두 방향 누적 방식이 핵심 패턴으로 작동합니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Hash Map / Hash Set, Greedy
- 설명: 두 문자열의 문자 빈도를 해시 맵으로 카운트하고, 이를 비교하여 anagram 여부를 판단한다. 해시 맵을 활용한 빈도 비교 패턴이 핵심이다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Depth-First Search, Binary Search, Monotonic Stack, Hash Map / Hash Set
- 설명: 반복적 DFS로 트리 노드를 순회하며 각 노드의 값이 부모가 정한 범위 안에 있는지 검사한다. 이와 동시에 BST의 성질을 만족하는지 확인하며, 범위 갱신은 자식 노드 방향에 따라 min/max를 업데이트한다.
답안 제출 문제
작성자 체크 리스트
In Review로 설정해주세요.검토자 체크 리스트
Important
본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!