diff --git a/contains-duplicate/JeonBeomGu-S.java b/contains-duplicate/JeonBeomGu-S.java new file mode 100644 index 0000000000..36f3e90b02 --- /dev/null +++ b/contains-duplicate/JeonBeomGu-S.java @@ -0,0 +1,21 @@ +import java.util.HashSet; +import java.util.Set; + +/** + * 시간 복잡도: O(n) - nums 배열 길이인 n번 만큼 반복문이 반복될 수 있음 + * 공간 복잡도: O(n) - set에 데이터를 저장할 때 nums 배열 길이인 n개의 공간만큼 추가 공간이 필요 + */ +public class Solution { + public boolean containsDuplicate(int[] nums) { + Set set = new HashSet<>(); + for (int i = 0; i < nums.length; i++) { + if (set.contains(nums[i])) { + return true; + } else { + set.add(nums[i]); + } + } + + return false; + } +} diff --git a/top-k-frequent-elements/JeonBeomGu-S.java b/top-k-frequent-elements/JeonBeomGu-S.java new file mode 100644 index 0000000000..fa7c810092 --- /dev/null +++ b/top-k-frequent-elements/JeonBeomGu-S.java @@ -0,0 +1,33 @@ +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 시간 복잡도: O(nlogn) - 배열의 길이 n 만큼 반복문과 정렬 + * 공간 복잡도: O(n) - 배열의 길이 n 만큼의 맵, 리스트와 답을 저장할 배열의 크기 k + * k는 최대 n을 넘지 못하므로 무시 + */ + +class Solution { + public int[] topKFrequent(int[] nums, int k) { + Map map = new HashMap(); + for (int num : nums) { + if (map.containsKey(num)) { + map.put(num, map.get(num) + 1); + } else { + map.put(num, 1); + } + } + + List list = new ArrayList<>(map.keySet()); + list.sort((a, b) -> map.get(b) - map.get(a)); + + int[] answer = new int[k]; + for (int i = 0; i < k; i++) { + answer[i] = list.get(i); + } + + return answer; + } +} diff --git a/two-sum/JeonBeomGu-S.java b/two-sum/JeonBeomGu-S.java new file mode 100644 index 0000000000..5aceb434f9 --- /dev/null +++ b/two-sum/JeonBeomGu-S.java @@ -0,0 +1,27 @@ +import java.util.HashMap; +import java.util.Map; + +/** + 시간 복잡도: O(n) - 최대 배열의 길이 n만큼 반복 + 공간 복잡도: O(n) - 최대 배열의 길이 n만큼의 map 크기 사용 + */ +class Solution { + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap<>(); + int[] answer = new int[2]; + + for (int i = 0; i < nums.length; i++) { + if (map.containsKey(target - nums[i])) { + answer[0] = map.get(target - nums[i]); + answer[1] = i; + // 찾은 경우 바로 return + return answer; + } else { + map.put(nums[i], i); + } + } + + // 못 찾은 경우 null + return null; + } +}