From 238d47311ef3a0e912b3884c7911319c363ee63e Mon Sep 17 00:00:00 2001 From: hanseo Date: Fri, 26 Jun 2026 21:35:48 +0900 Subject: [PATCH 1/8] contains-duplicate --- contains-duplicate/seueooo.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 contains-duplicate/seueooo.js diff --git a/contains-duplicate/seueooo.js b/contains-duplicate/seueooo.js new file mode 100644 index 0000000000..69c19bd069 --- /dev/null +++ b/contains-duplicate/seueooo.js @@ -0,0 +1,17 @@ +/** +풀이 +해시맵에 각 숫자들의 개수를 저장하고, 총 개수와 해시맵의 키 개수를 비교하여 중복 여부를 판단한다. + */ +var containsDuplicate = function (nums) { + let map = {}; + for (const n of nums) { + map[n] = map[n] ? map[n] + 1 : 1; + } + let count = 0; + for (const key of Object.keys(map)) { + count += map[key]; + } + if (count === Object.keys(map).length) { + return false; + } else return true; +}; From 95b667fceb36c88ea3560224f5c9e3c58efe212e Mon Sep 17 00:00:00 2001 From: hanseo Date: Fri, 26 Jun 2026 22:36:43 +0900 Subject: [PATCH 2/8] two-sum --- two-sum/seueooo.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 two-sum/seueooo.js diff --git a/two-sum/seueooo.js b/two-sum/seueooo.js new file mode 100644 index 0000000000..b0e346fcc3 --- /dev/null +++ b/two-sum/seueooo.js @@ -0,0 +1,16 @@ +/** +풀이 +해시맵으로 값의 존재 여부 확인 -> O(1) +배열을 딱 한번 순회하므로 O(n). + */ +var twoSum = function (nums, target) { + let map = new Map(); + for (let i = 0; i < nums.length; i++) { + const num = target - nums[i]; + if (map.has(num)) { + return [map.get(num), i]; + } + map.set(nums[i], i); + } + return []; +}; From 99f633f86d13b036f45b1b7910a5281e017cc29f Mon Sep 17 00:00:00 2001 From: hanseo Date: Sat, 27 Jun 2026 01:50:23 +0900 Subject: [PATCH 3/8] top-k-frequent-elements --- top-k-frequent-elements/seueooo.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 top-k-frequent-elements/seueooo.js diff --git a/top-k-frequent-elements/seueooo.js b/top-k-frequent-elements/seueooo.js new file mode 100644 index 0000000000..cf8bf4d82f --- /dev/null +++ b/top-k-frequent-elements/seueooo.js @@ -0,0 +1,18 @@ +/** + * 풀이 + * 해시맵을 사용하여 각 숫자의 빈도를 저장하고, 그 값을 기준으로 정렬하여 상위 k개의 요소를 선택한다. + * 시간 복잡도 - O(n log n) : 해시맵 생성 O(n) + 정렬 O(n log n) + * 공간 복잡도 - O(n) : 해시맵 저장 공간 + */ +var topKFrequent = function (nums, k) { + let map = {}; + for (const n of nums) { + map[n] = map[n] ? map[n] + 1 : 1; + } + const sorted = Object.entries(map).sort((a, b) => b[1] - a[1]); + let answer = []; + for (let i = 0; i < k; i++) { + answer.push(Number(sorted[i][0])); + } + return answer; +}; From 39944ba8ebb3428238cd3ac7defb8b4ef311ea02 Mon Sep 17 00:00:00 2001 From: hanseo Date: Sat, 27 Jun 2026 21:20:40 +0900 Subject: [PATCH 4/8] lowest-common-ancestor-of-a-binary-search-tree --- .../seueooo.js | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 lowest-common-ancestor-of-a-binary-search-tree/seueooo.js diff --git a/lowest-common-ancestor-of-a-binary-search-tree/seueooo.js b/lowest-common-ancestor-of-a-binary-search-tree/seueooo.js new file mode 100644 index 0000000000..872750530a --- /dev/null +++ b/lowest-common-ancestor-of-a-binary-search-tree/seueooo.js @@ -0,0 +1,26 @@ +/** + * 풀이 + * 1. 중복 제거 후 정렬 + * 2. 연속된 수의 개수를 세어 배열에 저장 + * 3. 배열을 내림차순으로 정렬 후 첫 번째 요소 반환 + * 시간 복잡도 - O(n log n) : 중복 제거 O(n) + 정렬 O(n log n) + * 공간 복잡도 - O(n) : 중복 제거 후 새로운 배열 생성 + */ +var longestConsecutive = function (nums) { + let arr = []; + let newNums = [...new Set(nums)]; + newNums.sort((a, b) => a - b); + let count = 1; + for (let i = 0; i < newNums.length - 1; i++) { + if (newNums[i] + 1 === newNums[i + 1]) { + count++; + } else { + arr.push(count); + count = 1; + } + } + // 마지막 그룹 + arr.push(count); + arr.sort((a, b) => b - a); + return arr[0]; +}; From 39fd1e0786b35308dc83a5177971228356cbe404 Mon Sep 17 00:00:00 2001 From: hanseo Date: Sat, 27 Jun 2026 22:21:53 +0900 Subject: [PATCH 5/8] house-robber --- house-robber/seueooo.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 house-robber/seueooo.js diff --git a/house-robber/seueooo.js b/house-robber/seueooo.js new file mode 100644 index 0000000000..ceff3dc389 --- /dev/null +++ b/house-robber/seueooo.js @@ -0,0 +1,19 @@ +/** + * 풀이 + * dp 사용하여 각 집까지 털 수 있는 최대 금액을 계산한다. + * dp[i]는 0번 집부터 i번 집까지만 고려했을 때 털 수 있는 최대 금액을 나타낸다. + * 시간 복잡도 - O(n) : 배열을 한 번 순회 + * 공간 복잡도 - O(n) : dp 배열 생성 + */ +var rob = function (nums) { + const n = nums.length; + let dp = new Array(n); + + dp[0] = nums[0]; + dp[1] = Math.max(nums[0], nums[1]); + + for (let i = 2; i < n; i++) { + dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]); + } + return dp[n - 1]; +}; From 326c333c90c34ab41262b12e999c50fe91345ed9 Mon Sep 17 00:00:00 2001 From: hanseo Date: Fri, 3 Jul 2026 21:02:48 +0900 Subject: [PATCH 6/8] valid-anagram --- valid-anagram/seueooo.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 valid-anagram/seueooo.js diff --git a/valid-anagram/seueooo.js b/valid-anagram/seueooo.js new file mode 100644 index 0000000000..c17dc25141 --- /dev/null +++ b/valid-anagram/seueooo.js @@ -0,0 +1,24 @@ +/** + * 풀이 + * 1. 두 문자열의 길이가 다르면 false를 반환한다. + * 2. 첫 번째 문자열을 순회하며 각 문자의 등장 횟수를 count 객체에 저장한다. + * 3. 두 번째 문자열을 순회하며 count 객체에서 해당 문자의 등장 횟수를 감소시킨다. + * 4. 만약 count 객체에 해당 문자가 없거나 등장 횟수가 0이면 false를 반환한다. + * 5. 모든 문자를 순회한 후에도 false를 반환하지 않았다면 true를 반환한다. + * 시간 복잡도 - O(n) : 두 문자열을 한 번씩 순회 + * 공간 복잡도 - O(1) : count 객체는 최대 26개의 알파벳만 저장 + */ +var isAnagram = function (s, t) { + let count = {}; + if (s.length !== t.length) { + return false; + } + for (const i of s) { + count[i] = count[i] ? count[i] + 1 : 1; + } + for (const i of t) { + if (!count[i]) return false; + count[i]--; + } + return true; +}; From ff91089530f3577a4ba52d7cc8570fd6247a3680 Mon Sep 17 00:00:00 2001 From: hanseo Date: Fri, 3 Jul 2026 22:42:19 +0900 Subject: [PATCH 7/8] climbing-stairs --- climbing-stairs/seueooo.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 climbing-stairs/seueooo.js diff --git a/climbing-stairs/seueooo.js b/climbing-stairs/seueooo.js new file mode 100644 index 0000000000..e858292818 --- /dev/null +++ b/climbing-stairs/seueooo.js @@ -0,0 +1,23 @@ +/** + * @param {number} n + * @return {number} + * + * 풀이 + * 1. dp를 사용하여 각 계단까지 올라갈 수 있는 방법의 수를 계산한다. + * 2. dp[i]는 i번째 계단까지 올라갈 수 있는 방법의 수를 나타낸다. + * 3. dp[i] = dp[i - 1] + dp[i - 2] : 마지막에 한 번에 1계단을 올라온 경우와 2계단을 올라온 경우를 합친다. + * 시간 복잡도 - O(n) : 배열을 한 번 순회 + * 공간 복잡도 - O(n) : dp 배열 생성 + */ +var climbStairs = function (n) { + let dp = []; + dp[0] = 0; + dp[1] = 1; + dp[2] = 2; + + for (let i = 3; i <= n; i++) { + dp[i] = dp[i - 1] + dp[i - 2]; + } + + return dp[n]; +}; From 087088efea50cde885ac37a1bd8a0f77fa119eac Mon Sep 17 00:00:00 2001 From: hanseo Date: Sat, 4 Jul 2026 00:06:59 +0900 Subject: [PATCH 8/8] product-of-array-except-self --- product-of-array-except-self/seueooo.js | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 product-of-array-except-self/seueooo.js diff --git a/product-of-array-except-self/seueooo.js b/product-of-array-except-self/seueooo.js new file mode 100644 index 0000000000..5dad52040c --- /dev/null +++ b/product-of-array-except-self/seueooo.js @@ -0,0 +1,29 @@ +/** + * 풀이 + * 1. prefix는 현재 인덱스까지의 곱을 저장하고, suffix는 현재 인덱스 이후의 곱을 저장한다. + * 2. 첫 번째 반복문에서 prefix를 계산하고, 두 번째 반복문에서 suffix를 계산하여 answer 배열에 곱한다. + * 시간 복잡도 - O(n) : 배열을 두 번 순회 + * 공간 복잡도 - O(1) : answer 배열 + * + * @param {number[]} nums + * @return {number[]} + */ +var productExceptSelf = function (nums) { + let prefix = 1; + let suffix = 1; + const n = nums.length; + let answer = new Array(n).fill(1); + + // 순방향 + for (let i = 0; i < n; i++) { + answer[i] = prefix; + prefix *= nums[i]; + } + + // 역방향 + for (let i = n - 1; i >= 0; i--) { + answer[i] *= suffix; + suffix *= nums[i]; + } + return answer; +};