diff --git a/contains-duplicate/wooseok123.js b/contains-duplicate/wooseok123.js new file mode 100644 index 000000000..2d643e052 --- /dev/null +++ b/contains-duplicate/wooseok123.js @@ -0,0 +1,7 @@ +// TC : O(n) | SC : O(n) + +function containsDuplicate(nums) { + let original_length = nums.length; + let modified_length = new Set(nums).size; + return original_length !== modified_length; +} diff --git a/kth-smallest-element-in-a-bst/wooseok123.js b/kth-smallest-element-in-a-bst/wooseok123.js new file mode 100644 index 000000000..485f0406a --- /dev/null +++ b/kth-smallest-element-in-a-bst/wooseok123.js @@ -0,0 +1,19 @@ +// TC : O(n log n) | SC : O(n) + +let findAllValuesInTree = (root, obj) => { + obj[root.val] = true; + if (!root.left && !root.right) return obj; + if (root.left) findAllValuesInTree(root.left, obj); + if (root.right) findAllValuesInTree(root.right, obj); + + return obj; +}; + +var kthSmallest = function (root, k) { + const obj = findAllValuesInTree(root, {}); + const sortedList = Object.keys(obj) + .map(Number) + .sort((a, b) => a - b); + + return sortedList[k - 1]; +}; diff --git a/number-of-1-bits/wooseok123.js b/number-of-1-bits/wooseok123.js new file mode 100644 index 000000000..2d711eb7f --- /dev/null +++ b/number-of-1-bits/wooseok123.js @@ -0,0 +1,34 @@ +let hammingWeight = function (n) { + return DecToBinAndGetSetBits(n); +}; + +// TC : O(log n) | SC : O(1) + +let DecToBinAndGetSetBits = (n) => { + let targetNum = n; + let result = 0; + while (targetNum > 0) { + let remainder = targetNum % 2; + if (remainder === 1) result += 1; + targetNum = parseInt(targetNum / 2); + } + return result; +}; + +// TC : O(log n) | SC : O(log n) +// 근데 사실 split 메서드 자체는 o(n)인데, toString과정을 통해 log(n)의 개수만큼 나와버린 것이면 o(log n)이라고 표기해도 되는걸까? + +// let DecToBinAndGetSetBits = (n) => { +// let target = n; +// let bin = n.toString(2); +// return bin.split("").filter((el) => el == 1).length +// } + +// TC : O(log n) | SC : O(log n) + +// let DecToBinAndGetSetBits = (n) => { +// let target = n; +// let bin = n.toString(2); +// let matches = bin.match(/1/g); +// return matches.length +// } diff --git a/palindromic-substrings/wooseok123.js b/palindromic-substrings/wooseok123.js new file mode 100644 index 000000000..2f1d47d46 --- /dev/null +++ b/palindromic-substrings/wooseok123.js @@ -0,0 +1,24 @@ +var countSubstrings = function (s) { + let result = 0; + // 개수를 키워나가며, 각 자리가 대칭을 이루는지 검사한다. + + // substring의 개수 설정 + for (let i = 0; i < s.length; i++) { + // 시작점 설정 + for (let j = 0; j < s.length - i; j++) { + let isPalindromic = true; + // 대칭되는 요소를 하나씩 비교 + for (let k = j; k < Math.ceil((j * 2 + i) / 2); k++) { + if (s[k] !== s[j * 2 + i - k]) { + isPalindromic = false; + break; + } + } + if (isPalindromic) result += 1; + } + } + + return result; +}; + +// TC : o(n^3) | SC : o(1) diff --git a/top-k-frequent-elements/wooseok123.js b/top-k-frequent-elements/wooseok123.js new file mode 100644 index 000000000..f1e423a59 --- /dev/null +++ b/top-k-frequent-elements/wooseok123.js @@ -0,0 +1,15 @@ +// TC : o(n log n) | SC : o(n) + +var topKFrequent = function (nums, k) { + const elements = countElments(nums); + const keys = Object.keys(elements).sort((a, b) => elements[b] - elements[a]); + return keys.slice(0, k); +}; + +let countElments = (nums) => { + const temp = {}; + for (const num of nums) { + temp[num] = (count[num] || 0) + 1; + } + return temp; +};