Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions contains-duplicate/jahyun-dev.rs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

  • 패턴: Sorting
  • 설명: 이 코드는 배열을 정렬한 후 인접한 요소를 비교하여 중복 여부를 판단하므로 정렬 알고리즘이 활용된 패턴입니다. 그러나 제시된 패턴 목록에는 'Sorting'이 포함되어 있지 않으므로, 해당하는 패턴이 없습니다.

📊 시간/공간 복잡도 분석

복잡도
Time O(n log n)
Space O(1)

피드백: 정렬을 위해 O(n log n) 시간 복잡도가 발생하며, 이후 인접 원소 비교는 O(n)입니다. 공간은 정렬을 위한 제자리 정렬이므로 추가 공간이 거의 필요 없습니다.

개선 제안: 현재 구현이 적절해 보입니다.

💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
impl Solution {
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
}
}
29 changes: 29 additions & 0 deletions longest-consecutive-sequence/jahyun-dev.rs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

  • 패턴: Hash Map / Hash Set, Union Find
  • 설명: 이 코드는 HashSet을 활용하여 연속된 수열의 시작점을 찾고, 연속된 수를 세는 방식으로 최장 연속 수열을 찾는다. Union Find 구조는 아니지만, 집합 활용이 핵심이다.

📊 시간/공간 복잡도 분석

복잡도
Time O(n)
Space O(n)

피드백: 집합에 모든 원소를 넣는 데 O(n), 각 원소에 대해 연속 구간을 찾는 과정이 집합 조회로 O(1) 이므로 전체 시간 복잡도는 O(n)입니다. 공간은 집합 저장을 위해 O(n)입니다.

개선 제안: 현재 구현이 적절해 보입니다.

💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!

Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
use std::collections::HashSet;

impl Solution {
pub fn longest_consecutive(nums: Vec<i32>) -> i32 {
let mut set: HashSet<i32> = HashSet::new();
let mut max_seq: i32 = 0;

for &n in nums.iter() {
set.insert(n);
}

for &n in set.iter() {
// 시작점
if !set.contains(&(n - 1)) {
let mut j = n + 1;
while set.contains(&j) {
j += 1;
}

let seq = j - n;
if seq > max_seq {
max_seq = seq
}
}
}

return max_seq;
}
}
16 changes: 16 additions & 0 deletions top-k-frequent-elements/jahyun-dev.rs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

  • 패턴: 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)입니다.

개선 제안: 현재 구현이 적절해 보입니다.

💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
use std::collections::HashMap;

impl Solution {
pub fn top_k_frequent(nums: Vec<i32>, k: i32) -> Vec<i32> {
let mut m: HashMap<i32, i32> = HashMap::new();

for n in nums {
*m.entry(n).or_insert(0) += 1;
}

let mut items: Vec<(i32, i32)> = m.into_iter().collect();
items.sort_by(|a, b| b.1.cmp(&a.1));

items.into_iter().take(k as usize).map(|(n, c)| n).collect()
}
}
37 changes: 37 additions & 0 deletions two-sum/jahyun-dev.rs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

  • 패턴: 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). 공간은 상수입니다.

개선 제안: 이중 루프 대신 해시맵을 사용하는 방법으로 개선하는 것을 고려할 수 있습니다.

💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!

Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
use std::collections::HashMap;

impl Solution {
/**
* Hashmap 사용 시 O(n) 시간 복잡도로 가능하다.
*/
pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
let mut map: HashMap<i32, i32> = HashMap::new();

for i in 0..nums.len() {
let v = nums[i];
let r = target - v;

if let Some(&j) = map.get(&r) {
return vec![i as i32, j as i32];
}

map.insert(v, i as i32);
}

return vec![0, 0];
}

pub fn two_sum_a(nums: Vec<i32>, target: i32) -> Vec<i32> {
let mut idx = [0i32, 2];

for i in 0..nums.len() {
for j in (i + 1)..nums.len() {
if (nums[i] + nums[j]) == target {
return vec![i as i32, j as i32];
}
}
}

return idx.to_vec();
}
}
Loading