diff --git a/contains-duplicate/krokerdile.js b/contains-duplicate/krokerdile.js new file mode 100644 index 000000000..17c709498 --- /dev/null +++ b/contains-duplicate/krokerdile.js @@ -0,0 +1,48 @@ +/** + * @param {number[]} nums + * @return {boolean} + */ + +/** + * 1차 풀이 + * - Map을 사용하여 각 숫자의 개수를 세는 방법 + */ +var containsDuplicate = function(nums) { + let dict = new Map(); + + nums.forEach((num)=>{ + if(dict.has(num)){ + dict.set(num, dict.get(num)+1); + }else{ + dict.set(num, 1); + } + }) + + for (const num of nums) { + if(dict.get(num) >= 2){ + return true; + } + } + return false; +}; + +/** + * 2차풀이 + * - Map을 사용하여 각 숫자의 개수를 세는 방법 + * - forEach를 사용하지 않고 for of문을 사용하여 반복문을 돌리는 방법 + */ +var containsDuplicate = function(nums) { + let dict = new Map(); + + for (const num of nums) { + if(dict.has(num)){ + dict.set(num, dict.get(num)+1); + }else{ + dict.set(num, 1); + } + if(dict.get(num) >= 2){ + return true; + } + } + return false; +}; diff --git a/house-robber/krokerdile.js b/house-robber/krokerdile.js new file mode 100644 index 000000000..7ab2d2fa4 --- /dev/null +++ b/house-robber/krokerdile.js @@ -0,0 +1,18 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var rob = function(nums) { + if (nums.length === 0) return 0; + if (nums.length === 1) return nums[0]; + + let dp = new Array(nums.length); + dp[0] = nums[0]; + dp[1] = Math.max(nums[0], nums[1]); + + for (let i = 2; i < nums.length; i++) { + dp[i] = Math.max(dp[i - 1], nums[i] + dp[i - 2]); + } + + return dp[nums.length - 1]; +}; diff --git a/longest-consecutive-sequence/krokerdile.js b/longest-consecutive-sequence/krokerdile.js new file mode 100644 index 000000000..bd53b8db6 --- /dev/null +++ b/longest-consecutive-sequence/krokerdile.js @@ -0,0 +1,28 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var longestConsecutive = function(nums) { + if (nums.length === 0) return 0; + + const numSet = new Set(nums); + let maxLength = 0; + + for (let num of numSet) { + // 연속 수열의 시작점인지 확인 + if (!numSet.has(num - 1)) { + let currentNum = num; + let currentLength = 1; + + // 연속된 숫자 있는 동안 증가 + while (numSet.has(currentNum + 1)) { + currentNum += 1; + currentLength += 1; + } + + maxLength = Math.max(maxLength, currentLength); + } + } + + return maxLength; +}; diff --git a/top-k-frequent-elements/krokerdile.js b/top-k-frequent-elements/krokerdile.js new file mode 100644 index 000000000..979e92d1f --- /dev/null +++ b/top-k-frequent-elements/krokerdile.js @@ -0,0 +1,26 @@ +/** + * @param {number[]} nums + * @param {number} k + * @return {number[]} + */ +var topKFrequent = function(nums, k) { + let dict = new Map(); + let temp = Array.from(new Set([...nums])); + for(const num of nums){ + if(dict.has(num)){ + dict.set(num, dict.get(num)+1); + }else{ + dict.set(num,1); + } + } + + temp = temp.sort((a,b)=>{ + let aCount = dict.get(a); + let bCount = dict.get(b); + + return bCount - aCount; + }) + + let slice = temp.slice(0,k); + return slice; +}; diff --git a/two-sum/krokerdile.js b/two-sum/krokerdile.js new file mode 100644 index 000000000..ce0664586 --- /dev/null +++ b/two-sum/krokerdile.js @@ -0,0 +1,15 @@ +/** + * @param {number[]} nums + * @param {number} target + * @return {number[]} + */ +var twoSum = function(nums, target) { + let dict = new Map(); + + for(const [index, num] of nums.entries()){ + if(dict.has(target-num) && dict.get(target-num) != index){ + return [dict.get(target-num),index]; + } + dict.set(num, index); + } +};