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
16 changes: 16 additions & 0 deletions contains-duplicate/JeonJe.java

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
  • 설명: 이 코드는 중복 체크를 위해 HashSet을 사용하여 각 원소의 존재 여부를 빠르게 확인하는 방식으로 구현되어 있습니다. 따라서 해시 맵 또는 해시 세트 패턴에 속합니다.

📊 시간/공간 복잡도 분석

유저 분석 실제 분석 결과
Time O(n) O(n)
Space O(n) O(n)

피드백: 집합에 원소를 하나씩 넣으며 이미 존재하는지 검사하므로 시간 복잡도는 원소 수에 비례합니다. 추가로 집합을 저장하는 공간이 필요합니다.

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

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import java.util.*;

// TC: O(n)
// SC: O(n)
class Solution {
public boolean containsDuplicate(int[] nums) {
Set<Integer> set = new HashSet<>();
for (int num : nums) {
if (set.contains(num)) {
return true;
}
set.add(num);
}
return false;
}
}
32 changes: 32 additions & 0 deletions longest-consecutive-sequence/JeonJe.java

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
  • 설명: 이 코드는 숫자들을 저장하고 빠르게 조회하기 위해 HashSet을 사용하며, 연속된 수를 찾기 위해 집합을 활용하는 방식으로 구성되어 있습니다.

📊 시간/공간 복잡도 분석

유저 분석 실제 분석 결과
Time O(n) O(n)
Space O(n) O(n)

피드백: 집합에 원소를 넣고, 각 원소에 대해 연속된 수열의 시작점인지 검사 후 확장하는 방식으로, 모든 원소를 최대 한 번씩만 검사하므로 선형 시간입니다.

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

Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import java.util.*;

// TC: O(n)
// SC: O(n)
class Solution {
public int longestConsecutive(int[] nums) {
if (nums.length == 0 || nums.length == 1) {
return nums.length;
}


HashSet<Integer> set = new HashSet<>();
for (int num : nums) {
set.add(num);
}

int answer = 1;
for (Integer cur : set) {
if (set.contains(cur - 1)) {
continue;
}

int right = cur;
while (set.contains(right + 1)) {
right++;
}
answer = Math.max(answer, right - cur + 1);
}

return answer;
}
}
24 changes: 24 additions & 0 deletions top-k-frequent-elements/JeonJe.java

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
  • 설명: 이 코드는 해시 맵을 사용해 빈도수를 계산하고, 정렬을 통해 상위 k개를 찾는 방식으로 동작하여 해당 패턴에 속합니다. 정렬은 명시적이지만, 정렬 자체가 핵심 로직입니다.

📊 시간/공간 복잡도 분석

유저 분석 실제 분석 결과
Time O(n log n) O(n log n)
Space O(n) O(n)

피드백: 모든 원소의 빈도를 계산한 후, 정렬을 통해 상위 k개를 선택하므로 시간 복잡도는 정렬에 따른 O(n log n)입니다. 정렬을 피하려면 힙 구조를 사용할 수도 있습니다.

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

Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import java.util.*;

// TC: O(n log n)
// SC: O(n)
class Solution {
public int[] topKFrequent(int[] nums, int k) {

Map<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
Integer freq = map.getOrDefault(num, 0);
map.put(num, freq + 1);
}

List<Map.Entry<Integer, Integer>> freqList = new ArrayList<>(map.entrySet());

return freqList.stream()
.sorted(Comparator.comparing(Map.Entry::getValue, Comparator.reverseOrder()))
.map(Map.Entry::getKey)
.limit(k)
.mapToInt(Integer::intValue)
.toArray();

}
}
17 changes: 17 additions & 0 deletions two-sum/JeonJe.java

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
  • 설명: 이 코드는 해시 맵을 활용하여 배열 내에서 두 수의 합이 타겟과 일치하는지 빠르게 찾는 방식으로 구현되어 있습니다. 이를 통해 시간 복잡도를 효율적으로 유지합니다.

📊 시간/공간 복잡도 분석

유저 분석 실제 분석 결과
Time O(n) O(n)
Space O(n) O(n)

피드백: 각 원소를 순회하며, 목표값에서 현재 원소를 뺀 값이 이미 맵에 존재하는지 검사합니다. 맵에 저장하는 공간과 시간 모두 선형입니다.

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

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import java.util.*;

// TC: O(n)
// SC: O(n)
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if(map.containsKey((target - nums[i])) && map.get(target - nums[i]) != i) {
return new int[]{i, map.get(target - nums[i])};
}
map.put(nums[i], i);
}

return new int[0];
}
}
Loading