From 2693442d8668946f15eaed974c681a03ac0f0db0 Mon Sep 17 00:00:00 2001 From: Nakji Date: Thu, 13 Nov 2025 14:08:48 +0900 Subject: [PATCH 1/7] contains duplicate solution --- contains-duplicate/YuuuuuuYu.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 contains-duplicate/YuuuuuuYu.java diff --git a/contains-duplicate/YuuuuuuYu.java b/contains-duplicate/YuuuuuuYu.java new file mode 100644 index 000000000..38f09c9e0 --- /dev/null +++ b/contains-duplicate/YuuuuuuYu.java @@ -0,0 +1,23 @@ +/** + * Runtime: 14ms + * Time Complexity: O(n) + * + * Memory: 93.59MB + * Space Complexity: O(n) + * + * Approach: HashSet을 사용하여 중복 검사 + * - 배열을 순회하면서 각 원소를 HashSet에 저장 + * - 이미 존재하는 원소를 발견하면 즉시 true 반환 + */ +class Solution { + public boolean containsDuplicate(int[] nums) { + Set set = new HashSet<>(); + for (int num: nums) { + if (set.contains(num)) { + return true; + } + set.add(num); + } + return false; + } +} From ecd7f5b93b235a640ab903f6e6931b7d1ee09e18 Mon Sep 17 00:00:00 2001 From: Nakji Date: Thu, 13 Nov 2025 14:23:09 +0900 Subject: [PATCH 2/7] add newline --- contains-duplicate/YuuuuuuYu.java | 1 + 1 file changed, 1 insertion(+) diff --git a/contains-duplicate/YuuuuuuYu.java b/contains-duplicate/YuuuuuuYu.java index 38f09c9e0..2c8f2e025 100644 --- a/contains-duplicate/YuuuuuuYu.java +++ b/contains-duplicate/YuuuuuuYu.java @@ -21,3 +21,4 @@ public boolean containsDuplicate(int[] nums) { return false; } } + From 6e65d41753b2598d1dcb014c49c9e8623b5b361f Mon Sep 17 00:00:00 2001 From: Nakji Date: Thu, 13 Nov 2025 15:00:59 +0900 Subject: [PATCH 3/7] two sum solution --- two-sum/YuuuuuuYu.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 two-sum/YuuuuuuYu.java diff --git a/two-sum/YuuuuuuYu.java b/two-sum/YuuuuuuYu.java new file mode 100644 index 000000000..3e82b6be2 --- /dev/null +++ b/two-sum/YuuuuuuYu.java @@ -0,0 +1,25 @@ +/** + * Runtime: 3ms + * Time Complexity: O(n) + * + * Memory: 46.97MB + * Space Complexity: O(n) + * + * Approach: HashMap을 사용하여 짝을 이루는 값(pair) 검사 + * - 배열을 순회하면서 각 원소의 짝을 계산 + * - 짝이 HashMap에 존재하는지 검사 + */ +class Solution { + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap<>(); + for (int i=0; i Date: Thu, 13 Nov 2025 16:00:36 +0900 Subject: [PATCH 4/7] top k frequent elements --- top-k-frequent-elements/YuuuuuuYu.java | 35 ++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 top-k-frequent-elements/YuuuuuuYu.java diff --git a/top-k-frequent-elements/YuuuuuuYu.java b/top-k-frequent-elements/YuuuuuuYu.java new file mode 100644 index 000000000..cf32c2255 --- /dev/null +++ b/top-k-frequent-elements/YuuuuuuYu.java @@ -0,0 +1,35 @@ +/** + * Runtime: 15ms + * Time Complexity: O(n log n) + * - 빈도 계산: O(n) + * - 정렬: O(u log u) ≤ O(n log n) + * - k개 추출: O(k) + * + * Memory: 47.73MB + * Space Complexity: O(n) + * - HashMap: O(u) ≤ O(n) + * - List: O(u) ≤ O(n) + * + * Approach: HashMap으로 빈도 계산 후 정렬하여 top k 추출 + * - 배열 순회하여 각 원소의 빈도 계산 + * - 빈도 기준 내림차순 정렬 + * - 상위 k개 원소 추출 + */ +class Solution { + public int[] topKFrequent(int[] nums, int k) { + Map frequentMap = new HashMap<>(); + for (int num: nums) { + frequentMap.put(num, frequentMap.getOrDefault(num, 0)+1); + } + + List> list = new ArrayList<>(frequentMap.entrySet()); + list.sort((a, b) -> b.getValue() - a.getValue()); + + int[] result = new int[k]; + for (int i=0; i Date: Thu, 13 Nov 2025 17:12:43 +0900 Subject: [PATCH 5/7] longest consecutive sequence --- longest-consecutive-sequence/YuuuuuuYu.java | 45 +++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 longest-consecutive-sequence/YuuuuuuYu.java diff --git a/longest-consecutive-sequence/YuuuuuuYu.java b/longest-consecutive-sequence/YuuuuuuYu.java new file mode 100644 index 000000000..3bcddee7c --- /dev/null +++ b/longest-consecutive-sequence/YuuuuuuYu.java @@ -0,0 +1,45 @@ +/** + * Runtime: 26ms + * Time Complexity: O(n) + * - HashSet 구성: O(n) + * - 모든 원소 순회: 최악 O(n), 평균적으로 더 빠름 (조기 종료) + * - 연속 수열 탐색: O(n) + * + * Memory: 95.11MB + * Space Complexity: O(n) + * + * Approach: HashSet을 이용하여 중복 제거 후 연속 수열 길이 탐색 + * - 연속 수열의 시작점만 탐색하여 중복 작업 방지 (num-1이 없는 경우) + * - 각 시작점에서 연속된 다음 숫자들을 순차적으로 탐색 + * - nums 사이즈에 도달 시 조기 종료하여 불필요한 탐색 방지 + */ +class Solution { + public int longestConsecutive(int[] nums) { + if (nums.length == 0) return 0; + + Set set = new HashSet<>(); + for (int num: nums) { + set.add(num); + } + + int longestLength = 0; + for (int num: set) { + if (!set.contains(num-1)) { + int currentNum = num; + int currentLength = 1; + + while (set.contains(currentNum+1)) { + currentNum++; + currentLength++; + } + + longestLength = longestLength < currentLength ? currentLength : longestLength; + if (longestLength == set.size()) { + return longestLength; + } + } + } + + return longestLength; + } +} From ddd020b1f82c05c0d91b7279c9b927dcb691d2a5 Mon Sep 17 00:00:00 2001 From: Nakji Date: Thu, 13 Nov 2025 17:57:47 +0900 Subject: [PATCH 6/7] house robber --- house-robber/YuuuuuuYu.java | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 house-robber/YuuuuuuYu.java diff --git a/house-robber/YuuuuuuYu.java b/house-robber/YuuuuuuYu.java new file mode 100644 index 000000000..aacc70de8 --- /dev/null +++ b/house-robber/YuuuuuuYu.java @@ -0,0 +1,28 @@ +/** + * Runtime: 0ms + * Time Complexity: O(n) + * + * Memory: 42.72MB + * Space Complexity: O(1) + * + * Approach: 두 가지 변수만 사용한 DP 접근법 + * - withoutPrevHouse: 이전 집을 털지 않았을 때의 최대 금액 + * - withPrevHouse: 이전 집까지 고려한 최대 금액 + * - 각 집에서 "털거나 안 털거나" 두 가지 선택지 중 최대값 선택 + * 1) 현재 집을 안 털면: 이전 집까지의 최대값 유지 + * 2) 현재 집을 털면: 전전 집까지의 최대값 + 현재 집 금액 + */ +class Solution { + public int rob(int[] nums) { + int withoutPrevHouse = 0; + int withPrevHouse = 0; + + for (int money: nums) { + int maxMoney = Math.max(withPrevHouse, withoutPrevHouse+money); + withoutPrevHouse = withPrevHouse; + withPrevHouse = maxMoney; + } + + return withPrevHouse; + } +} From 95e992ae8972497e705b3ef042c900da108e7512 Mon Sep 17 00:00:00 2001 From: yuuuuuuyu Date: Fri, 14 Nov 2025 15:58:08 +0900 Subject: [PATCH 7/7] fix: two sum, remove map.get(pair) condition --- two-sum/YuuuuuuYu.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/two-sum/YuuuuuuYu.java b/two-sum/YuuuuuuYu.java index 3e82b6be2..5a975c4b1 100644 --- a/two-sum/YuuuuuuYu.java +++ b/two-sum/YuuuuuuYu.java @@ -1,8 +1,8 @@ /** - * Runtime: 3ms + * Runtime: 2ms * Time Complexity: O(n) * - * Memory: 46.97MB + * Memory: 47.41MB * Space Complexity: O(n) * * Approach: HashMap을 사용하여 짝을 이루는 값(pair) 검사 @@ -14,7 +14,7 @@ public int[] twoSum(int[] nums, int target) { Map map = new HashMap<>(); for (int i=0; i