[jahyun-dev] WEEK 01 Solutions#2643
Conversation
📊 jahyun-dev 님의 학습 현황이번 주 제출 문제
누적 학습 요약
문제 풀이 현황
🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다. 🔢 API 사용량 (gpt-4.1-nano)
|
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Sorting
- 설명: 이 코드는 배열을 정렬한 후 인접한 요소를 비교하여 중복 여부를 판단하므로 정렬 알고리즘이 활용된 패턴입니다. 그러나 제시된 패턴 목록에는 'Sorting'이 포함되어 있지 않으므로, 해당하는 패턴이 없습니다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(n log n) |
| Space | O(1) |
피드백: 정렬을 위해 O(n log n) 시간 복잡도가 발생하며, 이후 인접 원소 비교는 O(n)입니다. 공간은 정렬을 위한 제자리 정렬이므로 추가 공간이 거의 필요 없습니다.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Hash Map / Hash Set, Union Find
- 설명: 이 코드는 HashSet을 활용하여 연속된 수열의 시작점을 찾고, 연속된 수를 세는 방식으로 최장 연속 수열을 찾는다. Union Find 구조는 아니지만, 집합 활용이 핵심이다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(n) |
| Space | O(n) |
피드백: 집합에 모든 원소를 넣는 데 O(n), 각 원소에 대해 연속 구간을 찾는 과정이 집합 조회로 O(1) 이므로 전체 시간 복잡도는 O(n)입니다. 공간은 집합 저장을 위해 O(n)입니다.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Hash Map / Hash Set, Sorting
- 설명: HashMap을 사용해 각 요소의 빈도수를 계산하고, 정렬을 통해 상위 k개를 선택하는 방식으로 구현되어 있습니다. 정렬은 빈도수 기준 내림차순으로 수행됩니다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(n log n) |
| Space | O(n) |
피드백: 빈도수 계산은 O(n), 정렬은 O(n log n), 결과 추출은 O(k)입니다. 전체 시간 복잡도는 정렬에 의해 O(n log n)입니다. 공간은 HashMap과 결과 저장을 위해 O(n)입니다.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Hash Map / Hash Set
- 설명: 해당 코드는 HashMap을 이용하여 두 수의 합이 target이 되는 인덱스를 찾는 방식으로, 빠른 검색을 위해 해시맵을 활용하는 패턴입니다.
📊 시간/공간 복잡도 분석
ℹ️ 이 파일에는 2가지 풀이가 포함되어 있어 각각 분석합니다.
풀이 1: Solution.two_sum — Time: O(n) / Space: O(n)
| 복잡도 | |
|---|---|
| Time | O(n) |
| Space | O(n) |
피드백: 각 원소에 대해 해시맵 조회와 삽입이 O(1) 이므로 전체 시간 복잡도는 O(n). 공간은 해시맵 저장을 위해 O(n)입니다.
개선 제안: 현재 구현이 적절해 보입니다.
풀이 2: Solution.two_sum_a — Time: O(n^2) / Space: O(1)
| 복잡도 | |
|---|---|
| Time | O(n^2) |
| Space | O(1) |
피드백: 이중 루프로 모든 쌍을 탐색하므로 시간 복잡도는 O(n^2). 공간은 상수입니다.
개선 제안: 이중 루프 대신 해시맵을 사용하는 방법으로 개선하는 것을 고려할 수 있습니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
| pub fn contains_duplicate(nums: Vec<i32>) -> bool { | ||
| let mut nx = nums; | ||
| nx.sort(); | ||
|
|
||
| for i in 1..nx.len() { | ||
| if nx[i] == nx[i - 1] { | ||
| return true; | ||
| } | ||
| } | ||
|
|
||
| false | ||
| } |
There was a problem hiding this comment.
@jahyun-dev 안녕하세요. 바로 아래 PR에 살고있는 스터디원입니다 :)
러스트로 풀어주셨네요! 요즘 러스트가 대세인가봐요? 많이들 보여서 신기합니다~
이번 풀이는 정렬 후 비교 방식으로 풀어주셨는데, 여기서 시간복잡도를 좀 더 줄일 수 있는 풀이도 있어서 궁금하시면 한번 보셔도 좋을 것 같아요!
추가로, 원래 자신의 밑에 있는 사람의 PR을 리뷰해주는게 룰로 알고 있어서 제 PR에 일단은 임의로 리뷰어로 지정해드렸는데 한번 놀려오셔서 보시고 코멘트 남겨주시거나, 없으시면 승인 해주시면 감사하겠습니다. 🙏
| use std::collections::HashMap; | ||
|
|
||
| impl Solution { | ||
| pub fn top_k_frequent(nums: Vec<i32>, k: i32) -> Vec<i32> { |
There was a problem hiding this comment.
@jahyun-dev 정렬로 간단하게 풀어주셨네요! 요 문제는 O(nlogn)보다 더 빠르게 푸는 follow up도 있어서 해당 방법도 한번 보고 넘어가시면 도움이 되실 것 같아서 남겨봅니다.
| let v = nums[i]; | ||
| let r = target - v; |
There was a problem hiding this comment.
@jahyun-dev v와 r이 어떤 의미인지 변수명에서 드러나면 좀 더 좋지 않을까 합니다.
| @@ -0,0 +1,14 @@ | |||
| impl Solution { | |||
There was a problem hiding this comment.
안녕하세요!
이번 PR 리뷰를 맡은 스터디원입니다!
저는 Rust를 처음봐서, GPT를 활용해서 Python으로 번역된 코드를 기준으로 리뷰하겠습니다!
sorting 알고리즘은 시간 복잡도가 O(N log N)으로 알고 있습니다.
아래 분의 코멘트처럼 set 자료형의 조회 시간 복잡도는 O(N)이라, set을 활용한다면 시간 복잡도를 더 줄일 수 있을 것 같습니다!
There was a problem hiding this comment.
특정 수보다 1 작은 값이 없는 것으로 연속된 값 중에 최솟값을 찾으신 후, 연속된 길이를 측정하셨군요!
코드가 직관적이라 이해하기 좋았습니다!
답안 제출 문제
작성자 체크 리스트
In Review로 설정해주세요.검토자 체크 리스트
Important
본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!