From a0fc4812dfa03c2eba4efd50dfb15d698fdc0291 Mon Sep 17 00:00:00 2001 From: bloxxom Date: Sun, 9 Nov 2025 16:53:35 +0900 Subject: [PATCH 1/6] contains-duplicate solution --- contains-duplicate/blossssom.ts | 40 +++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 contains-duplicate/blossssom.ts diff --git a/contains-duplicate/blossssom.ts b/contains-duplicate/blossssom.ts new file mode 100644 index 0000000000..1a4f6c464e --- /dev/null +++ b/contains-duplicate/blossssom.ts @@ -0,0 +1,40 @@ +/** + * + * @param nums - 정수 배열 + * @returns - 배열에 같은 값이 2번 이상 반복 되면 true 아님 false + * + * @description + * 1. Set으로 길이 비교 후 길이에 따라 반환 O(n) -> Set 생성 시 입력된 배열 요소 순회 + * 2. Map으로 간단하게 체크 만약 has 시 true 반환 O(n) + * 3. Map, Set 없이 객체로 체크 O(n) + */ + +function containsDuplicate(nums: number[]): boolean { + return nums.length !== new Set(nums).size ? true : false; +} + +// function containsDuplicate(nums: number[]): boolean { +// const map = new Map(); +// for (const num of nums) { +// if (map.has(num)) { +// return true; +// } +// map.set(num, 1); +// } +// return false; +// } + +// function containsDuplicate(nums: number[]): boolean { +// const obj: Record = {}; + +// for (const num of nums) { +// obj[num] = (obj[num] || 0) + 1; +// } + +// return Object.keys.length !== nums.length ? true : false; +// } + +const exam01 = containsDuplicate([1, 2, 3, 1]); +const exam02 = containsDuplicate([1, 2, 3, 4]); + +console.log(exam01, exam02); From d905857539c8d7ec37c5d52cc5e6562bc105a776 Mon Sep 17 00:00:00 2001 From: jaehyunglee Date: Mon, 10 Nov 2025 09:39:44 +0900 Subject: [PATCH 2/6] two-sum solution --- two-sum/blossssom.ts | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 two-sum/blossssom.ts diff --git a/two-sum/blossssom.ts b/two-sum/blossssom.ts new file mode 100644 index 0000000000..4f703c92ba --- /dev/null +++ b/two-sum/blossssom.ts @@ -0,0 +1,38 @@ +/** + * @param nums - 정수 배열 + * @param target - nums 값을 더해 나올 값 + * @returns - target을 만드는 index 값 + * + * @description + * 1. 동일한 요소 두번 사용 금지 + * 2. 각 입력에 대해 명확한 하나의 솔루션이 있다고 가정 + * + * @answer1 + * - O(n^2) + * + * @answer2 + * - O(n) + */ + +// function twoSum(nums: number[], target: number): number[] { +// for (let i = 0; i < nums.length - 1; i++) { +// for (let j = i + 1; j < nums.length; j++) { +// if (nums[i] + nums[j] === target) { +// return [i, j]; +// } +// } +// } +// return []; +// } + +function twoSum(nums: number[], target: number): number[] { + const map = new Map(); + + for (let i = 0; i < nums.length; i++) { + if (map.has(target - nums[i])) { + return [map.get(target - nums[i]), i]; + } + map.set(nums[i], i); + } + return []; +} From 9f3340be9093eabfc04d39ef77d2eb543b04ebdb Mon Sep 17 00:00:00 2001 From: jaehyunglee Date: Tue, 11 Nov 2025 08:09:50 +0900 Subject: [PATCH 3/6] top-k-frequent-elements solution --- top-k-frequent-elements/blossssom.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 top-k-frequent-elements/blossssom.ts diff --git a/top-k-frequent-elements/blossssom.ts b/top-k-frequent-elements/blossssom.ts new file mode 100644 index 0000000000..faf46dec70 --- /dev/null +++ b/top-k-frequent-elements/blossssom.ts @@ -0,0 +1,23 @@ +/** + * @param nums - 정수 배열 + * @param k - 자주 등장한 요소의 길이 + * @returns - 자주 등장한 요소들 [] + */ +function topKFrequent(nums: number[], k: number): number[] { + const map = new Map(); + for (const num of nums) { + if (map.has(num)) { + map.set(num, map.get(num) + 1); + } else { + map.set(num, 1); + } + } + + const sorted = Array.from(map) + .sort((a, b) => b[1] - a[1]) + .slice(0, k) + .map((v) => v[0]); + return sorted; +} + +topKFrequent([1, 1, 1, 2, 2, 3], 2); From a3db8f6bc8b3669a4b8f4d11d778ba0d623ab2d0 Mon Sep 17 00:00:00 2001 From: jaehyunglee Date: Wed, 12 Nov 2025 09:08:10 +0900 Subject: [PATCH 4/6] longest-consecutive-sequence solution --- longest-consecutive-sequence/blossssom.ts | 52 +++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 longest-consecutive-sequence/blossssom.ts diff --git a/longest-consecutive-sequence/blossssom.ts b/longest-consecutive-sequence/blossssom.ts new file mode 100644 index 0000000000..cf12da2262 --- /dev/null +++ b/longest-consecutive-sequence/blossssom.ts @@ -0,0 +1,52 @@ +/** + * @param nums - 정렬되지 않은 정수 배열 + * @returns - 가장 긴 연속 요소 길이 + * + * @description + * 1. 객체의 정렬 활용 방식 - O(n log n) -> 결국 key 정렬 시 n log n 발생 + * 2. 정렬 없이 key find 방식 - O(n) -> 시작점일 경우만 판단, 모든 num에 대해 돌지 않음 + */ + +// function longestConsecutive(nums: number[]): number { +// const obj = nums.reduce((acc, cur) => { +// acc[cur] = (acc[cur] || 0) + 1; +// return acc; +// }, {}); +// let cnt = 1; +// let answer = 0; + +// const keys = Object.keys(obj); + +// for (let i = 1; i < keys.length; i++) { +// if (Number(keys[i]) === Number(keys[i - 1]) + 1) { +// cnt++; +// } else { +// answer = Math.max(answer, cnt); +// cnt = 1; +// } +// } + +// answer = Math.max(answer, cnt); + +// return answer; +// } + +function longestConsecutive(nums: number[]): number { + const numSet = new Set(nums); + let answer = 0; + + for (const num of numSet) { + if (!numSet.has(num - 1)) { + let current = num; + let cnt = 1; + + while (numSet.has(current + 1)) { + current++; + cnt++; + } + + answer = Math.max(answer, cnt); + } + } + return answer; +} From 672830cb13f71ae33e312753f7947ea6d9a38d15 Mon Sep 17 00:00:00 2001 From: jaehyunglee Date: Fri, 14 Nov 2025 15:31:26 +0900 Subject: [PATCH 5/6] house-robber solution --- house-robber/blossssom.ts | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 house-robber/blossssom.ts diff --git a/house-robber/blossssom.ts b/house-robber/blossssom.ts new file mode 100644 index 0000000000..1b0607541e --- /dev/null +++ b/house-robber/blossssom.ts @@ -0,0 +1,43 @@ +/** + * @description - 같은 날 인접한 두 집에 침입 시 자동으로 신고됨 + * @param nums - 각 집의 금액을 나타내는 정수 배열 + * @returns - 경찰에 신고되지 않고 훔칠 수 있는 최대 금액 + * + * @description + * - 1. tabulation 방식 - O(n) + */ +// function rob(nums: number[]): number { +// if (nums.length < 2) { +// return nums[0]; +// } + +// const dpTable: Array = Array.from({ length: nums.length }, () => 0); +// dpTable[0] = nums[0]; +// dpTable[1] = Math.max(nums[0], nums[1]); + +// for (let i = 2; i < nums.length; i++) { +// dpTable[i] = Math.max(nums[i] + dpTable[i - 2], dpTable[i - 1]); +// } + +// return Math.max(...dpTable); +// } + +function rob(nums: number[]): number { + const memo: Array = Array.from({ length: nums.length }, () => -1); + + function solve(i: number): number { + if (i < 0) { + return 0; + } + + if (memo[i] !== -1) { + return memo[i]; + } + + const robCurrent = nums[i] + solve(i - 2); + const skipCurrent = solve(i - 1); + memo[i] = Math.max(robCurrent, skipCurrent); + return memo[i]; + } + return solve(nums.length - 1); +} From 5e6afc6055e8735e84ffeca5c299933fcf790aa1 Mon Sep 17 00:00:00 2001 From: jaehyunglee Date: Fri, 14 Nov 2025 16:13:53 +0900 Subject: [PATCH 6/6] add new line solution files --- contains-duplicate/blossssom.ts | 1 + house-robber/blossssom.ts | 1 + longest-consecutive-sequence/blossssom.ts | 1 + top-k-frequent-elements/blossssom.ts | 1 + two-sum/blossssom.ts | 1 + 5 files changed, 5 insertions(+) diff --git a/contains-duplicate/blossssom.ts b/contains-duplicate/blossssom.ts index 1a4f6c464e..a23ff968ed 100644 --- a/contains-duplicate/blossssom.ts +++ b/contains-duplicate/blossssom.ts @@ -38,3 +38,4 @@ const exam01 = containsDuplicate([1, 2, 3, 1]); const exam02 = containsDuplicate([1, 2, 3, 4]); console.log(exam01, exam02); + diff --git a/house-robber/blossssom.ts b/house-robber/blossssom.ts index 1b0607541e..d656866114 100644 --- a/house-robber/blossssom.ts +++ b/house-robber/blossssom.ts @@ -41,3 +41,4 @@ function rob(nums: number[]): number { } return solve(nums.length - 1); } + diff --git a/longest-consecutive-sequence/blossssom.ts b/longest-consecutive-sequence/blossssom.ts index cf12da2262..d167b90c5b 100644 --- a/longest-consecutive-sequence/blossssom.ts +++ b/longest-consecutive-sequence/blossssom.ts @@ -50,3 +50,4 @@ function longestConsecutive(nums: number[]): number { } return answer; } + diff --git a/top-k-frequent-elements/blossssom.ts b/top-k-frequent-elements/blossssom.ts index faf46dec70..df1da46997 100644 --- a/top-k-frequent-elements/blossssom.ts +++ b/top-k-frequent-elements/blossssom.ts @@ -21,3 +21,4 @@ function topKFrequent(nums: number[], k: number): number[] { } topKFrequent([1, 1, 1, 2, 2, 3], 2); + diff --git a/two-sum/blossssom.ts b/two-sum/blossssom.ts index 4f703c92ba..4d4847b1a0 100644 --- a/two-sum/blossssom.ts +++ b/two-sum/blossssom.ts @@ -36,3 +36,4 @@ function twoSum(nums: number[], target: number): number[] { } return []; } +