diff --git a/contains-duplicate/JangAyeon.js b/contains-duplicate/JangAyeon.js new file mode 100644 index 0000000000..c73d10b362 --- /dev/null +++ b/contains-duplicate/JangAyeon.js @@ -0,0 +1,19 @@ +/** + * @param {number[]} nums + * @return {boolean} + */ + +// 첫번째 제출 +var containsDuplicate = function (nums) { + const counter = new Map(); + for (let e of nums) { + const v = counter.has(e) ? counter.get(e) + 1 : 1; + counter.set(e, v); + } + const answer = [...counter.values()].some((item) => item >= 2); + return answer; +}; +// 두번째 제출 +var containsDuplicate = function (nums) { + return new Set(nums).size !== nums.length; +}; diff --git a/house-robber/JangAyeon.js b/house-robber/JangAyeon.js new file mode 100644 index 0000000000..cbe7289623 --- /dev/null +++ b/house-robber/JangAyeon.js @@ -0,0 +1,15 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var rob = function (nums) { + const N = nums.length; + let answer = 0; + let [rob1, rob2] = [0, 0]; + for (let num of nums) { + let temp = Math.max(num + rob1, rob2); + rob1 = rob2; + rob2 = temp; + } + return rob2; +}; diff --git a/longest-consecutive-sequence/JangAyeon.js b/longest-consecutive-sequence/JangAyeon.js new file mode 100644 index 0000000000..b99e68771a --- /dev/null +++ b/longest-consecutive-sequence/JangAyeon.js @@ -0,0 +1,26 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var longestConsecutive = function (nums) { + if (nums.length == 0) return 0; + let answer = 0; + let numsSet = new Set(nums); + const N = nums.length; + + for (let num of numsSet) { + if (!numsSet.has(num - 1)) { + let temp = num; + let length = 1; + + while (numsSet.has(temp + 1)) { + length += 1; + temp += 1; + } + // console.log(length) + answer = Math.max(length, answer); + } + } + + return answer; +}; diff --git a/top-k-frequent-elements/JangAyeon.js b/top-k-frequent-elements/JangAyeon.js new file mode 100644 index 0000000000..c7a5829ab9 --- /dev/null +++ b/top-k-frequent-elements/JangAyeon.js @@ -0,0 +1,18 @@ +/** + * @param {number[]} nums + * @param {number} k + * @return {number[]} + */ +var topKFrequent = function (nums, k) { + nums = nums.sort((a, b) => a - b); + const counter = new Map(); + for (let num of nums) { + const value = counter.has(num) ? counter.get(num) + 1 : 1; + counter.set(num, value); + } + const sorted = [...counter.entries()].sort((a, b) => b[1] - a[1]); + const answer = sorted.slice(0, k).map((item) => item[0]); + // console.log(counter, sorted, answer) + + return answer; +}; diff --git a/two-sum/JangAyeon.js b/two-sum/JangAyeon.js new file mode 100644 index 0000000000..85c7df72e9 --- /dev/null +++ b/two-sum/JangAyeon.js @@ -0,0 +1,29 @@ +/** + * @param {number[]} nums + * @param {number} target + * @return {number[]} + */ + +// 첫번째 통과 풀이 - 브루트포스 +var twoSum = function (nums, target) { + for (let i = 0; i < nums.length; i++) { + for (let j = i + 1; j < nums.length; j++) { + if (nums[i] + nums[j] == target) { + return [i, j]; + } + } + } +}; + +// 두번째 통과 풀이 - 해시맵 + 효율성 고려 +var twoSum = function (nums, target) { + const map = new Map(); // {값: 인덱스} + + for (let i = 0; i < nums.length; i++) { + const complement = target - nums[i]; // 필요한 짝 계산 + if (map.has(complement)) { + return [map.get(complement), i]; // 이전에 complement가 있었으면 바로 반환 + } + map.set(nums[i], i); + } +};