From e603d1638ae0c496defc307c19ce5157ce78f2ca Mon Sep 17 00:00:00 2001 From: herrinekim Date: Fri, 13 Dec 2024 00:58:00 +0900 Subject: [PATCH 1/7] add solution: contains-duplicate --- contains-duplicate/HerrineKim.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 contains-duplicate/HerrineKim.js diff --git a/contains-duplicate/HerrineKim.js b/contains-duplicate/HerrineKim.js new file mode 100644 index 000000000..40bf2aa3b --- /dev/null +++ b/contains-duplicate/HerrineKim.js @@ -0,0 +1,16 @@ +// 시간복잡도: O(n) + +/** + * @param {number[]} nums + * @return {boolean} + */ +var containsDuplicate = function (nums) { + const seen = new Set(); + for (let num of nums) { + if (seen.has(num)) { + return true; // 중복 발견 + } + seen.add(num); + } + return false; // 모든 요소가 고유 +}; \ No newline at end of file From fec6b728289d0bf861677931b3def9add5994a0f Mon Sep 17 00:00:00 2001 From: herrinekim Date: Fri, 13 Dec 2024 20:42:19 +0900 Subject: [PATCH 2/7] add solution: valid-palindrome --- valid-palindrome/HerrineKim.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 valid-palindrome/HerrineKim.js diff --git a/valid-palindrome/HerrineKim.js b/valid-palindrome/HerrineKim.js new file mode 100644 index 000000000..84ccb14fa --- /dev/null +++ b/valid-palindrome/HerrineKim.js @@ -0,0 +1,23 @@ +// 시간복잡도: O(n) + +/** + * @param {string} s + * @return {boolean} + */ +var isPalindrome = function (s) { + // 전처리 - 알파벳과 숫자만 남기고 소문자로 변환 + const cleanString = s.toLowerCase().replace(/[^a-z0-9]/g, ""); + + // 양 끝에서 포인터를 이동하며 확인 + let left = 0, right = cleanString.length - 1; + + while (left < right) { + if (cleanString[left] !== cleanString[right]) { + return false; // 대칭이 깨지면 false + } + left++; + right--; + } + + return true; // 대칭이 유지되면 true +}; \ No newline at end of file From c56b72710d23d5a65b3f051d2b5b69f7003a8129 Mon Sep 17 00:00:00 2001 From: herrinekim Date: Fri, 13 Dec 2024 20:46:22 +0900 Subject: [PATCH 3/7] add solution: top-k-frequent-elements --- top-k-frequent-elements/HerrineKim.js | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 top-k-frequent-elements/HerrineKim.js diff --git a/top-k-frequent-elements/HerrineKim.js b/top-k-frequent-elements/HerrineKim.js new file mode 100644 index 000000000..c8031e592 --- /dev/null +++ b/top-k-frequent-elements/HerrineKim.js @@ -0,0 +1,30 @@ +// 시간복잡도: O(n) + +/** + * @param {number[]} nums + * @param {number} k + * @return {number[]} + */ +var topKFrequent = function (nums, k) { + // 빈도 계산 + const frequencyMap = new Map(); + for (let num of nums) { + frequencyMap.set(num, (frequencyMap.get(num) || 0) + 1); + } + + // 버킷 정렬 + const bucket = Array(nums.length + 1).fill(null).map(() => []); + for (let [num, freq] of frequencyMap) { + bucket[freq].push(num); + } + + // 빈도 높은 요소들 추출 + const result = []; + for (let i = bucket.length - 1; i >= 0 && result.length < k; i--) { + if (bucket[i].length > 0) { + result.push(...bucket[i]); + } + } + + return result.slice(0, k); // 상위 k개의 요소 반환 +}; \ No newline at end of file From 1053604362ea44e890216f7081eb718b788b3422 Mon Sep 17 00:00:00 2001 From: herrinekim Date: Fri, 13 Dec 2024 20:52:55 +0900 Subject: [PATCH 4/7] add solution: longest-consecutive-sequence --- longest-consecutive-sequence/HerrineKim.js | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 longest-consecutive-sequence/HerrineKim.js diff --git a/longest-consecutive-sequence/HerrineKim.js b/longest-consecutive-sequence/HerrineKim.js new file mode 100644 index 000000000..ed986283c --- /dev/null +++ b/longest-consecutive-sequence/HerrineKim.js @@ -0,0 +1,31 @@ +// 시간복잡도: O(n) + +/** + * @param {number[]} nums + * @return {number} + */ +var longestConsecutive = function (nums) { + // Set을 사용해 중복 제거 + const numSet = new Set(nums); + let longestStreak = 0; + + // 각 숫자를 기준으로 연속 시퀀스를 탐색 + for (let num of numSet) { + // num이 시퀀스의 시작점인 경우만 탐색 + if (!numSet.has(num - 1)) { + let currentNum = num; + let currentStreak = 1; + + // 현재 시퀀스를 따라가며 길이 계산 + while (numSet.has(currentNum + 1)) { + currentNum++; + currentStreak++; + } + + // 최대 길이를 업데이트 + longestStreak = Math.max(longestStreak, currentStreak); + } + } + + return longestStreak; +}; \ No newline at end of file From 0e61080dcc1d2a393ba803c12a77121d2780e9b5 Mon Sep 17 00:00:00 2001 From: herrinekim Date: Fri, 13 Dec 2024 21:02:38 +0900 Subject: [PATCH 5/7] add solution: house-robber --- house-robber/HerrineKim.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 house-robber/HerrineKim.js diff --git a/house-robber/HerrineKim.js b/house-robber/HerrineKim.js new file mode 100644 index 000000000..9d327ae24 --- /dev/null +++ b/house-robber/HerrineKim.js @@ -0,0 +1,24 @@ +// 시간복잡도: O(n) + +/** + * @param {number[]} nums + * @return {number} + */ +var rob = function (nums) { + const n = nums.length; + if (n === 0) return 0; + if (n === 1) return nums[0]; + + // DP 배열 초기화 + let prev2 = 0; // dp[i-2] + let prev1 = 0; // dp[i-1] + + // 최대 수익 계산 + for (let num of nums) { + const current = Math.max(prev1, prev2 + num); + prev2 = prev1; + prev1 = current; + } + + return prev1; +}; From 6659921a46f426783d05a8064dc311d465c8adef Mon Sep 17 00:00:00 2001 From: herrinekim Date: Fri, 13 Dec 2024 21:09:16 +0900 Subject: [PATCH 6/7] fix: lint --- contains-duplicate/HerrineKim.js | 2 +- longest-consecutive-sequence/HerrineKim.js | 2 +- top-k-frequent-elements/HerrineKim.js | 2 +- valid-palindrome/HerrineKim.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/contains-duplicate/HerrineKim.js b/contains-duplicate/HerrineKim.js index 40bf2aa3b..1ac0ab86b 100644 --- a/contains-duplicate/HerrineKim.js +++ b/contains-duplicate/HerrineKim.js @@ -13,4 +13,4 @@ var containsDuplicate = function (nums) { seen.add(num); } return false; // 모든 요소가 고유 -}; \ No newline at end of file +}; diff --git a/longest-consecutive-sequence/HerrineKim.js b/longest-consecutive-sequence/HerrineKim.js index ed986283c..c204a0403 100644 --- a/longest-consecutive-sequence/HerrineKim.js +++ b/longest-consecutive-sequence/HerrineKim.js @@ -28,4 +28,4 @@ var longestConsecutive = function (nums) { } return longestStreak; -}; \ No newline at end of file +}; diff --git a/top-k-frequent-elements/HerrineKim.js b/top-k-frequent-elements/HerrineKim.js index c8031e592..b537ec7a1 100644 --- a/top-k-frequent-elements/HerrineKim.js +++ b/top-k-frequent-elements/HerrineKim.js @@ -27,4 +27,4 @@ var topKFrequent = function (nums, k) { } return result.slice(0, k); // 상위 k개의 요소 반환 -}; \ No newline at end of file +}; diff --git a/valid-palindrome/HerrineKim.js b/valid-palindrome/HerrineKim.js index 84ccb14fa..8c5b536f1 100644 --- a/valid-palindrome/HerrineKim.js +++ b/valid-palindrome/HerrineKim.js @@ -20,4 +20,4 @@ var isPalindrome = function (s) { } return true; // 대칭이 유지되면 true -}; \ No newline at end of file +}; From 14a128c9f4eed8def64802bf2eeb4cd928b4646a Mon Sep 17 00:00:00 2001 From: herrinekim Date: Sat, 14 Dec 2024 16:09:13 +0900 Subject: [PATCH 7/7] fix: add new line at the end --- contains-duplicate/HerrineKim.js | 1 + house-robber/HerrineKim.js | 1 + longest-consecutive-sequence/HerrineKim.js | 1 + top-k-frequent-elements/HerrineKim.js | 1 + valid-palindrome/HerrineKim.js | 1 + 5 files changed, 5 insertions(+) diff --git a/contains-duplicate/HerrineKim.js b/contains-duplicate/HerrineKim.js index 1ac0ab86b..ee5b0750a 100644 --- a/contains-duplicate/HerrineKim.js +++ b/contains-duplicate/HerrineKim.js @@ -14,3 +14,4 @@ var containsDuplicate = function (nums) { } return false; // 모든 요소가 고유 }; + diff --git a/house-robber/HerrineKim.js b/house-robber/HerrineKim.js index 9d327ae24..36013c74b 100644 --- a/house-robber/HerrineKim.js +++ b/house-robber/HerrineKim.js @@ -22,3 +22,4 @@ var rob = function (nums) { return prev1; }; + diff --git a/longest-consecutive-sequence/HerrineKim.js b/longest-consecutive-sequence/HerrineKim.js index c204a0403..454bef7a7 100644 --- a/longest-consecutive-sequence/HerrineKim.js +++ b/longest-consecutive-sequence/HerrineKim.js @@ -29,3 +29,4 @@ var longestConsecutive = function (nums) { return longestStreak; }; + diff --git a/top-k-frequent-elements/HerrineKim.js b/top-k-frequent-elements/HerrineKim.js index b537ec7a1..aae514d14 100644 --- a/top-k-frequent-elements/HerrineKim.js +++ b/top-k-frequent-elements/HerrineKim.js @@ -28,3 +28,4 @@ var topKFrequent = function (nums, k) { return result.slice(0, k); // 상위 k개의 요소 반환 }; + diff --git a/valid-palindrome/HerrineKim.js b/valid-palindrome/HerrineKim.js index 8c5b536f1..49989790f 100644 --- a/valid-palindrome/HerrineKim.js +++ b/valid-palindrome/HerrineKim.js @@ -21,3 +21,4 @@ var isPalindrome = function (s) { return true; // 대칭이 유지되면 true }; +