From fcf70c97db4a36f748faec087d4636475c757dff Mon Sep 17 00:00:00 2001 From: Youngjae Kim Date: Sat, 4 Jan 2025 18:44:01 +0900 Subject: [PATCH 1/9] add: solve #221 Best Time to Buy And Sell Stock with ts --- best-time-to-buy-and-sell-stock/Yjason-K.ts | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 best-time-to-buy-and-sell-stock/Yjason-K.ts diff --git a/best-time-to-buy-and-sell-stock/Yjason-K.ts b/best-time-to-buy-and-sell-stock/Yjason-K.ts new file mode 100644 index 000000000..b544ecab1 --- /dev/null +++ b/best-time-to-buy-and-sell-stock/Yjason-K.ts @@ -0,0 +1,27 @@ +/** + * 최대 이익을 계산하는 함수 + * @param {number[]} prices + * @returns {number} + * + * 시간 복잡도 : O(n) (n: 주식 가격 배열의 길이) + * 공간 복잡도 : 0(1) (추가 자료구조 X) + */ +function maxProfit(prices: number[]): number { + let minPrice = 100001; // 지금까지의 최소 가격 + let maxProfit = 0; // 최대 이익 + + for (let price of prices) { + // 최소 가격 갱신 + if (price < minPrice) { + minPrice = price; + } + + // 현재 가격에서 최소 가격을 뺀 이익이 최대 이익보다 크다면 갱신 + const potentialProfit = price - minPrice; + if (potentialProfit > maxProfit) { + maxProfit = potentialProfit; + } + } + + return maxProfit; +} \ No newline at end of file From 2236c567a4e73fee8aa85e0b4cc02d250890daaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EC=9E=AC?= Date: Mon, 6 Jan 2025 22:34:52 +0900 Subject: [PATCH 2/9] add: solve #236 Group Anagrams with ts --- group-anagrams/Yjason-K.ts | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 group-anagrams/Yjason-K.ts diff --git a/group-anagrams/Yjason-K.ts b/group-anagrams/Yjason-K.ts new file mode 100644 index 000000000..b3a85b905 --- /dev/null +++ b/group-anagrams/Yjason-K.ts @@ -0,0 +1,33 @@ +/** + * 주어진 문자열 배열에서 Anagram을 그룹화 해서 배열 만들기 + * @param {string[]} strs - 문자열 배열 + * @returns {string[][]} Anagram을 그룹 배열 + * + * 문자열들을 정렬해서 Map에 담아서 존재하면 그 때의 문자를 value로 추가 + * 존재하지 않으면 새로운 배열을 value로 추가 + * + * 시간 복잡도: O(N * M * log(M)) + * - N은 문자열 배열의 길이 + * - M은 각 문자열의 평균 길이 (정렬 시간 때문) + * 공간 복잡도: O(N * M) + * - 해시맵에 저장되는 문자열 그룹 때문 + */ +function groupAnagrams(strs: string[]): string[][] { + const anagramMap: Map = new Map(); + for (const str of strs) { + + // 정렬된 문자열 + const sortedStr = str.split('').sort().join(''); + + // 정렬된 문자열이 존재하는 않는 경우 + if (!anagramMap.has(sortedStr)) { + anagramMap.set(sortedStr, []) + } + + // 정렬된 문자열을 key로 하는 value str 추가 + anagramMap.get(sortedStr)?.push(str); + } + + // anagramMap에서 values만 배열로해서 출력 + return Array.from(anagramMap.values()) +} \ No newline at end of file From 6bed3de0910eb19be1c0e6e253d98d3780ba69cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EC=9E=AC?= Date: Thu, 9 Jan 2025 21:25:41 +0900 Subject: [PATCH 3/9] add: solve #238 Encode and Decode strings with ts --- encode-and-decode-strings/Yjason-K.ts | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 encode-and-decode-strings/Yjason-K.ts diff --git a/encode-and-decode-strings/Yjason-K.ts b/encode-and-decode-strings/Yjason-K.ts new file mode 100644 index 000000000..4ce126cac --- /dev/null +++ b/encode-and-decode-strings/Yjason-K.ts @@ -0,0 +1,28 @@ +/** + * @description 문자열 배열을 하나의 문자열로 인코딩합니다. + * @param {string[]} strs - 문자열 배열 + * @returns {string} 인코딩된 문자열 + * + * 시간 복잡도: O(N) + * - N은 입력 배열의 모든 문자열 길이의 합 + * 공간 복잡도: O(1) + * - 추가 메모리 사용 없음 + */ +function encode(strs: string[]): string { + return strs.join(':'); + } + + /** + * @description 인코딩된 문자열을 다시 문자열 배열로 디코딩합니다. + * @param {string} s - 인코딩된 문자열 + * @returns {string[]} 디코딩된 문자열 배열 + * + * 시간 복잡도: O(N) + * - N은 입력 문자열의 길이 + * 공간 복잡도: O(1) + * - 추가 메모리 사용 없음 + */ + function decode(s: string): string[] { + return s.split(':'); + } + \ No newline at end of file From de4895149678a27b1c7968d0f6df39ee35d7a17c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EC=9E=AC?= Date: Sat, 11 Jan 2025 12:51:18 +0900 Subject: [PATCH 4/9] add: solve #271 Word Break with ts --- word-break/Yjason-K.ts | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 word-break/Yjason-K.ts diff --git a/word-break/Yjason-K.ts b/word-break/Yjason-K.ts new file mode 100644 index 000000000..c4185c581 --- /dev/null +++ b/word-break/Yjason-K.ts @@ -0,0 +1,39 @@ +/** + * 주어진 문자열이 단어 사전에 있는 단어들로 나누어질 수 있는지 확인합니다. + * + * + * @param {string} s - 확인할 문자열 + * @param {string[]} wordDict - 단어 사전 + * @returns {boolean} 문자열이 단어로 완벽히 나누어질 수 있으면 `true`, 아니면 `false` + * + * 시간 복잡성 O(n * m * k) + * - n: 문자열 s 길이 + * - m: 단어 사전 길이 + * - k: 단어 사전 내 단어 길이 + * + * 공간 복잠성 O(n) + * - 메모이제이션(memo) 및 재귀 호출 스택 크기가 문자열 길이 n에 비례. + */ +function wordBreak(s: string, wordDict: string[]): boolean { + const memo: Record = {}; + + /** + * @param {number} start - 현재 시작 idx + * @returns {boolean} 주어진 idx 부터 문자열을 나눌 수 있으면 true + */ + const dfs = (start: number): boolean => { + if (start in memo) return memo[start]; + if (start === s.length) return (memo[start] = true); + + for (const word of wordDict) { + if (s.startsWith(word, start) && dfs(start + word.length)) { + return (memo[start] = true); + } + } + + return (memo[start] = false); + }; + + return dfs(0); +} + From 79ca2b981867efd5835ac2b7f6a498199b71032f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EC=9E=AC?= Date: Sat, 11 Jan 2025 12:54:18 +0900 Subject: [PATCH 5/9] fix: line break --- best-time-to-buy-and-sell-stock/Yjason-K.ts | 3 ++- encode-and-decode-strings/Yjason-K.ts | 1 + group-anagrams/Yjason-K.ts | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/best-time-to-buy-and-sell-stock/Yjason-K.ts b/best-time-to-buy-and-sell-stock/Yjason-K.ts index b544ecab1..8eae8e5fc 100644 --- a/best-time-to-buy-and-sell-stock/Yjason-K.ts +++ b/best-time-to-buy-and-sell-stock/Yjason-K.ts @@ -24,4 +24,5 @@ function maxProfit(prices: number[]): number { } return maxProfit; -} \ No newline at end of file +} + diff --git a/encode-and-decode-strings/Yjason-K.ts b/encode-and-decode-strings/Yjason-K.ts index 4ce126cac..e9fb77671 100644 --- a/encode-and-decode-strings/Yjason-K.ts +++ b/encode-and-decode-strings/Yjason-K.ts @@ -25,4 +25,5 @@ function encode(strs: string[]): string { function decode(s: string): string[] { return s.split(':'); } + \ No newline at end of file diff --git a/group-anagrams/Yjason-K.ts b/group-anagrams/Yjason-K.ts index b3a85b905..a4a2dd744 100644 --- a/group-anagrams/Yjason-K.ts +++ b/group-anagrams/Yjason-K.ts @@ -30,4 +30,5 @@ function groupAnagrams(strs: string[]): string[][] { // anagramMap에서 values만 배열로해서 출력 return Array.from(anagramMap.values()) -} \ No newline at end of file +} + From 865210d4655c28a4fb8dcf954fe7e9481b4f0004 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EC=9E=AC?= Date: Sat, 11 Jan 2025 12:57:53 +0900 Subject: [PATCH 6/9] fix: line break --- encode-and-decode-strings/Yjason-K.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/encode-and-decode-strings/Yjason-K.ts b/encode-and-decode-strings/Yjason-K.ts index e9fb77671..e807b93bb 100644 --- a/encode-and-decode-strings/Yjason-K.ts +++ b/encode-and-decode-strings/Yjason-K.ts @@ -26,4 +26,7 @@ function encode(strs: string[]): string { return s.split(':'); } + + + \ No newline at end of file From 7b2618024992b70ccec075c44d05958790e5d9d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EC=9E=AC?= Date: Sat, 11 Jan 2025 21:15:43 +0900 Subject: [PATCH 7/9] =?UTF-8?q?fix:=20=EA=B3=B5=EB=B0=B1=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- encode-and-decode-strings/Yjason-K.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/encode-and-decode-strings/Yjason-K.ts b/encode-and-decode-strings/Yjason-K.ts index e807b93bb..e9fb77671 100644 --- a/encode-and-decode-strings/Yjason-K.ts +++ b/encode-and-decode-strings/Yjason-K.ts @@ -26,7 +26,4 @@ function encode(strs: string[]): string { return s.split(':'); } - - - \ No newline at end of file From 928c09729805b16644e8b4f7d85b2000b97f7fc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EC=9E=AC?= Date: Sat, 11 Jan 2025 21:20:49 +0900 Subject: [PATCH 8/9] =?UTF-8?q?fix:=20=EC=98=A4=ED=83=88=EC=9E=90=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- word-break/Yjason-K.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/word-break/Yjason-K.ts b/word-break/Yjason-K.ts index c4185c581..36c7dd656 100644 --- a/word-break/Yjason-K.ts +++ b/word-break/Yjason-K.ts @@ -11,7 +11,7 @@ * - m: 단어 사전 길이 * - k: 단어 사전 내 단어 길이 * - * 공간 복잠성 O(n) + * 공간 복잡성 O(n) * - 메모이제이션(memo) 및 재귀 호출 스택 크기가 문자열 길이 n에 비례. */ function wordBreak(s: string, wordDict: string[]): boolean { From 9260d770bee3a90b86afa4c8cd8742909060da87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EC=9E=AC?= Date: Sat, 11 Jan 2025 21:22:27 +0900 Subject: [PATCH 9/9] =?UTF-8?q?fix:=20=EA=B3=B5=EB=B0=B1=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- encode-and-decode-strings/Yjason-K.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/encode-and-decode-strings/Yjason-K.ts b/encode-and-decode-strings/Yjason-K.ts index e9fb77671..92fa77b0b 100644 --- a/encode-and-decode-strings/Yjason-K.ts +++ b/encode-and-decode-strings/Yjason-K.ts @@ -26,4 +26,3 @@ function encode(strs: string[]): string { return s.split(':'); } - \ No newline at end of file