[sonshn] WEEK 01 Solutions#2659
Conversation
📊 sonshn 님의 학습 현황이번 주 제출 문제
누적 학습 요약
문제 풀이 현황
🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다. 🔢 API 사용량 (gpt-5-nano)
|
xeulbn
left a comment
There was a problem hiding this comment.
전체적으로 문제 요구사항을 잘 반영했고, 풀이 흐름도 명확해서 이해하기 좋았습니다.
다만 일부 문제들은 다른 관점에서 한 번 더 고민해보시는 것도 좋을 것 같습니다!!
| */ | ||
| class Solution { | ||
| public boolean containsDuplicate(int[] nums) { | ||
| HashSet<Integer> distinctSet = new HashSet<>(); |
There was a problem hiding this comment.
현재 코드에서는 HashSet 고유 기능보다는 Set 인터페이스에서 제공하는 contains, add 메서드만 사용하고 있는 것 같습니다.
그래서 변수 타입을 HashSet로 두기보다,
인터페이스 타입인 Set로 선언해도 괜찮을 것 같은데
혹시 따로 HashSet 구현체로 명시하신 이유가 있을까요?
| @@ -0,0 +1,17 @@ | |||
| class Solution { | |||
| public int[] twoSum(int[] nums, int target) { | |||
There was a problem hiding this comment.
이미 자동리뷰에도 달렸지만, 값을 더 빠르게 조회할 수 있는 자료구조를 활용하면 반복 횟수를 줄일 수 있을 것 같습니다!
| * 공간 복잡도: O(n) | ||
| */ | ||
| class Solution { | ||
| public int[] topKFrequent(int[] nums, int k) { |
There was a problem hiding this comment.
지금 풀어주신 풀이도 충분히 직관적이고 이해하기 좋은 것 같습니다.
다만 이 문제의 경우, 결과로 필요한 값은 상위 k개뿐이기 때문에 모든 고유 숫자를 정렬하지 않고 필요한 개수만 유지하는 방식도 고려해볼 수 있을 것 같습니다.
예를 들어 PriorityQueue를 활용하면 상위 k개의 후보만 관리할 수 있어서 고유 숫자의 개수가 많고 k가 상대적으로 작을 때 정렬 비용을 줄이는 데 도움이 될 수 있을 것 같습니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Hash Map / Hash Set, Greedy
- 설명: 집합을 이용해 중복 여부를 빠르게 확인하는 방식으로, 한 번의 순회와 상수/로그 수준의 탐색으로 중복 여부를 판단하므로 해시 기반 패턴과 간단한 탐색 흐름이 결합됩니다.
📊 시간/공간 복잡도 분석
ℹ️ 이 파일에는 2가지 풀이가 포함되어 있어 각각 분석합니다.
풀이 1: Solution.containsDuplicate — Time: ✅ O(n) → O(n) / Space: ✅ O(n) → O(n)
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(n) | ✅ |
| Space | O(n) | O(n) | ✅ |
피드백: 집합에 값을 하나씩 삽입하며 중복 여부를 체크하므로 시간은 배열 길이에 비례하고, 추가적인 저장공간은 중복 여부를 판단하기 위해 필요합니다.
개선 제안: 현재 구현이 적절해 보입니다.
풀이 2: Solution.containsDuplicate — 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.
🏷️ 알고리즘 패턴 분석
- 패턴: Depth-First Search, Backtracking, Dynamic Programming
- 설명: 재귀 DFS를 사용해 현재 집에서 털고 다음 이웃을 건너뛰는 경우를 분기하여 최적해를 찾는 패턴이다. 중복 계산이 있어 비효율적이나, 하위 문제를 재귀적으로 해결하는 구조가 Backtracking 및 DP의 기초가 된다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(2^n) | O(2^n) | ✅ |
| Space | O(2^n) | O(n) | ❌ |
피드백: 각 위치에서 두 가지 선택(도둑질-현 위치 건너뛰기 vs 건너뛰기)으로 분기하며 중복 재귀 호출이 많아 지수 시간 복잡도가 됩니다. 메모이제이션이 필요합니다.
개선 제안: 고려해볼 만한 대안: 메모이제이션(탐색 중복 제거) 또는 DP bottom-up로 시간 복잡도를 O(n)으로 개선.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Binary Search, Greedy, Sort/Order-based Pattern
- 설명: 주어진 코드는 배열을 정렬한 뒤 인접 요소를 비교하여 연속 부분수열의 길이를 추적합니다. 정렬이 핵심 전제이며, 연속 여부 판단과 구간 길이의 최댓값 갱신이 주된 작업입니다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n log n) | O(n log n) | ✅ |
| Space | O(n log n) | O(1) | ❌ |
피드백: 정렬이 필요해 전체 복잡도가 O(n log n)으로 증가합니다. 중복 제거 및 선형 해법도 가능하지만 현재 방식은 간단합니다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Hash Map / Hash Set, Sorting
- 설명: 해당 코드는 각 숫자의 빈도수를 HashMap으로 계산하고, 빈도수 기준으로 정렬한 후 상위 k개를 선택합니다. 따라서 Hash Map 패턴과 정렬(Sort) 패턴이 주로 사용됩니다.
📊 시간/공간 복잡도 분석
ℹ️ 이 파일에는 2가지 풀이가 포함되어 있어 각각 분석합니다.
풀이 1: Solution.topKFrequent — Time: ❌ O(n log n) → O(n log m) / Space: ❌ O(n) → O(m)
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n log n) | O(n log m) | ❌ |
| Space | O(n) | O(m) | ❌ |
피드백: 빈도 계산과 정렬로 간단하게 해결하지만, n은 배열 길이, m은 고유 숫자 수입니다. 정렬 대신 힙(heap)을 사용하면 O(n log k)도 가능.
개선 제안: 고려해볼 만한 대안: 해시맵 + 힙을 사용해 상위 k개를 추출하는 방식으로 개선.
풀이 2: Solution.topKFrequent — Time: ❌ O(n log n) → O(n log m) / Space: ❌ O(n) → O(m)
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n log n) | O(n log m) | ❌ |
| Space | O(n) | O(m) | ❌ |
피드백: 빈도 계산과 정렬로 간단하게 해결하지만, n은 배열 길이, m은 고유 숫자 수입니다. 정렬 대신 힙(heap)을 사용하면 O(n log k)도 가능.
개선 제안: 고려해볼 만한 대안: 해시맵 + 힙을 사용해 상위 k개를 추출하는 방식으로 개선.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Brute Force
- 설명: 두 개의 루프를 이용해 모든 쌍의 합을 검사하는 전형적인 브루트 포스(Brute Force) 방식으로 문제를 해결합니다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(n^2) |
| Space | O(1) |
피드백: 브루트포스 방식으로 구현되어 최악의 경우 큰 입력에서 비효율적입니다.
개선 제안: 고려해볼 만한 대안: 해시맵을 사용해 한 번의 순회로 해결하는 O(n) 풀이로 개선.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
답안 제출 문제
작성자 체크 리스트
In Review로 설정해주세요.검토자 체크 리스트
Important
본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!