From 3fdc206e755131d05df61c19b34dabda626cc9c2 Mon Sep 17 00:00:00 2001 From: hanseulhee <3021062@gmail.com> Date: Wed, 4 Dec 2024 17:12:46 +0900 Subject: [PATCH 1/6] contains duplicate solution --- contains-duplicate/hanseulhee.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 contains-duplicate/hanseulhee.js diff --git a/contains-duplicate/hanseulhee.js b/contains-duplicate/hanseulhee.js new file mode 100644 index 000000000..3147ca063 --- /dev/null +++ b/contains-duplicate/hanseulhee.js @@ -0,0 +1,17 @@ +/** + * @param {number[]} nums + * @return {boolean} + */ + +var containsDuplicate = function(nums) { + const duplicate = new Set(); + + for (let i = 0; i < nums.length; i++) { + if (duplicate.has(nums[i])) { + return true; + } + duplicate.add(nums[i]); + } + + return false; +}; From eb02143b79f319a6dddab8b9429c4d5a65eed240 Mon Sep 17 00:00:00 2001 From: hanseulhee <3021062@gmail.com> Date: Wed, 4 Dec 2024 17:30:08 +0900 Subject: [PATCH 2/6] add contains duplicate solution explain --- contains-duplicate/hanseulhee.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/contains-duplicate/hanseulhee.js b/contains-duplicate/hanseulhee.js index 3147ca063..5df28653a 100644 --- a/contains-duplicate/hanseulhee.js +++ b/contains-duplicate/hanseulhee.js @@ -1,6 +1,12 @@ /** * @param {number[]} nums * @return {boolean} + * + * 접근: 중첩 반복문을 통해 중복이 있으면 true 반환, 중복이 없으면 false를 반환하도록 설계하였습니다. + * 그러나 배열의 요소를 두 번 돌기 때문에 더 효율적인 방법으로 설계하고자 하였습니다. + * + * 해결: 더 효율적인 방법으로 중복 여부를 검사하는 Set을 사용하게 되었습니다. + * Set에 해당 요소가 있는 지 확인하고 있다면 true를 없다면 false를 반환하도록 하였습니다. */ var containsDuplicate = function(nums) { From 8937108a35b00533a10aae0481ab7da4a48701f4 Mon Sep 17 00:00:00 2001 From: hanseulhee <3021062@gmail.com> Date: Thu, 5 Dec 2024 18:12:53 +0900 Subject: [PATCH 3/6] valid palindrome solution --- valid-palindrome/hanseulhee.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 valid-palindrome/hanseulhee.js diff --git a/valid-palindrome/hanseulhee.js b/valid-palindrome/hanseulhee.js new file mode 100644 index 000000000..3b5f2514d --- /dev/null +++ b/valid-palindrome/hanseulhee.js @@ -0,0 +1,24 @@ +/** + * @param {string} s + * @return {boolean} + * + * 해결: 먼저 문자열의 정방향, 역방향 비교를 위해 문자열을 소문자로 변환하였으며 특수기호는 제외하였습니다. + * 정방향과 역방향을 비교하여 문자가 모두 일치하면 true 아니라면 false를 반환하였습니다. + */ +var isPalindrome = function (s) { + const filterS = s.toLowerCase().replace(/[^a-z0-9]/g, ""); + + let left = 0; + let right = filterS.length - 1; + + while (left < right) { + if (filterS[left] !== filterS[right]) { + return false; + } else { + left++; + right--; + } + } + + return true; +}; From 63f44837fa08c871ff733cc0ceeff9b3d11b99c6 Mon Sep 17 00:00:00 2001 From: hanseulhee <3021062@gmail.com> Date: Sun, 15 Dec 2024 13:03:47 +0900 Subject: [PATCH 4/6] top k frequent elements solution --- top-k-frequent-elements/hanseulhee.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 top-k-frequent-elements/hanseulhee.js diff --git a/top-k-frequent-elements/hanseulhee.js b/top-k-frequent-elements/hanseulhee.js new file mode 100644 index 000000000..6700114e4 --- /dev/null +++ b/top-k-frequent-elements/hanseulhee.js @@ -0,0 +1,22 @@ +/** + * @param {number[]} nums + * @param {number} k + * @return {number[]} + */ + +function topKFrequent(nums, k) { + // 숫자의 빈도를 저장할 Map 생성 + const frequency = new Map(); + + // 빈도 계산 + for (const num of nums) { + // Map에 이미 숫자가 있으면 +1, 없으면 1로 reset + frequency.set(num, (frequency.get(num) || 0) + 1); + } + + // 빈도 순으로 숫자 정렬 후 가장 빈도가 높은 k개의 숫자를 반환 + return [...frequency.entries()] // entries를 이용해 Map을 배열로 변환 + .sort((a, b) => b[1] - a[1]) + .slice(0, k) + .map(entry => entry[0]); +} From bd650381cf8fb0c180fdf7605d3717a1e462f262 Mon Sep 17 00:00:00 2001 From: hanseulhee <3021062@gmail.com> Date: Sun, 15 Dec 2024 13:11:49 +0900 Subject: [PATCH 5/6] longest consecutive sequence solution --- longest-consecutive-sequence/hanseulhee.js | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 longest-consecutive-sequence/hanseulhee.js diff --git a/longest-consecutive-sequence/hanseulhee.js b/longest-consecutive-sequence/hanseulhee.js new file mode 100644 index 000000000..d6e9eb0e9 --- /dev/null +++ b/longest-consecutive-sequence/hanseulhee.js @@ -0,0 +1,30 @@ +/** + * @param {number[]} nums + * @return {number} + */ + +var longestConsecutive = function (nums) { + // Set으로 배열에서 중복된 요소 제거 + const numSet = new Set(nums) + + // 최장 길이 + let longest = 0 + + // 배열을 돌며 첫 시작이 되는 숫자를 찾음 + for (const num of numSet) { + // 연속된 숫자의 시작은 num - 1이 Set에 존재하지 않는 숫자여야 함 + if (!numSet.has(num - 1)) { + let currentNum = num + let currentStreak = 1 + + while (numSet.has(currentNum + 1)) { + currentNum += 1 // 다음 숫자로 이동 + currentStreak += 1 // 연속된 길이 증가 + } + + longest = Math.max(longest, currentStreak) + } + } + + return longest +} From dff59b11d0cf33a3fbb4103894438ff674d1dc34 Mon Sep 17 00:00:00 2001 From: hanseulhee <3021062@gmail.com> Date: Sun, 15 Dec 2024 13:15:32 +0900 Subject: [PATCH 6/6] house robber solution --- house-robber/hanseulhee.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 house-robber/hanseulhee.js diff --git a/house-robber/hanseulhee.js b/house-robber/hanseulhee.js new file mode 100644 index 000000000..7ff0a74e4 --- /dev/null +++ b/house-robber/hanseulhee.js @@ -0,0 +1,20 @@ +/** + * @param {number[]} nums + * @return {number} + */ + +var rob = function (nums) { + // 집이 하나인 경우 + if (nums.length === 1) return nums[0] + + let prevMax = 0 // 두 집 전까지의 최대 금액 + let currMax = 0 // 이전 집까지의 최대 금액 + + for (let num of nums) { + let temp = currMax // 현재 최대 금액 + currMax = Math.max(currMax, prevMax + num) // 현재 집을 털거나 털지 않을 경우 중 큰 값 + prevMax = temp // 이전 집으로 이동 + } + + return currMax // 최대 금액 반환 +}