From 2a28c6675ce2c0a66a1f6206a87cf4ae8df18849 Mon Sep 17 00:00:00 2001 From: Youngjae Kim Date: Thu, 19 Dec 2024 23:27:24 +0900 Subject: [PATCH 1/3] add: solve #218 Valid Anagram with ts --- valid-anagram/Yjason-K.ts | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 valid-anagram/Yjason-K.ts diff --git a/valid-anagram/Yjason-K.ts b/valid-anagram/Yjason-K.ts new file mode 100644 index 000000000..5556cf448 --- /dev/null +++ b/valid-anagram/Yjason-K.ts @@ -0,0 +1,40 @@ +/** + * 두 문자열을 비교해서 Anagram 여부 확인 + * - 시간 복잡도: O(n) + * - 문자열 순회와 비교 과정을 포함하여 n은 문자열의 길이 + * - 공간 복잡도: 0(1) + * - 알파벳 개수가 26개로 고정 상수 공간 + * @param {string} s - 문자열 s + * @param {string} t - 문자열 t + * @returns {boolean} - Anagram 여부 + */ +function isAnagram(s: string, t: string): boolean { + // 두 문열의 길이가 다른경우 false 반환 + if (s.length !== t.length) { + return false; + } + + // 문자열 알파벳 사전을 위한 객체 선언 + let vocabS = {}; + let vocabT = {}; + + // s 문자열에 대한 알파벳 사전 생성 + for (const char in s) { + vocabS = vocabS[char] ? vocabS[char] + 1 : 1; + }; + + // t 문자열에 대한 알파벳 사전 생성 + for (const char in t) { + vocabT = vocabT[char] ? vocabT[char] + 1 : 1; + + + // 두 문자열 사전을 비교하며 count 가 일치 하지 않은 경우 false 반환 + for (const char in vocabS) { + if (vocabS[char] !== vocabT[char]) { + return false; + } + } + + return true; +}; + From b2c99a11be3fa7211d044fc051d74e6996fd9719 Mon Sep 17 00:00:00 2001 From: Youngjae Kim Date: Thu, 19 Dec 2024 23:28:18 +0900 Subject: [PATCH 2/3] add: solve #218 Valid Anagram with ts --- valid-anagram/Yjason-K.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/valid-anagram/Yjason-K.ts b/valid-anagram/Yjason-K.ts index 5556cf448..1b9de5105 100644 --- a/valid-anagram/Yjason-K.ts +++ b/valid-anagram/Yjason-K.ts @@ -26,6 +26,7 @@ function isAnagram(s: string, t: string): boolean { // t 문자열에 대한 알파벳 사전 생성 for (const char in t) { vocabT = vocabT[char] ? vocabT[char] + 1 : 1; + } // 두 문자열 사전을 비교하며 count 가 일치 하지 않은 경우 false 반환 From 4e9b8534f59ac948e5f8f9af9e4e2ee412274994 Mon Sep 17 00:00:00 2001 From: Youngjae Kim Date: Sat, 21 Dec 2024 16:07:53 +0900 Subject: [PATCH 3/3] add: solve #230 Climbing Stairs with ts --- climbing-stairs/Yjason-K.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 climbing-stairs/Yjason-K.ts diff --git a/climbing-stairs/Yjason-K.ts b/climbing-stairs/Yjason-K.ts new file mode 100644 index 000000000..c62d4e689 --- /dev/null +++ b/climbing-stairs/Yjason-K.ts @@ -0,0 +1,25 @@ +/** + * @description + * 동적 프로그래밍(Dynamic Programming, DP)을 사용하여 계단을 오르는 방법 수를 계산합니다. + * - 점화식: dp[i] = dp[i-1] + dp[i-2] + * - dp[i-1]: 이전 계단에서 1단계 올라온 경우 + * - dp[i-2]: 두 계단 아래에서 2단계 올라온 경우 + * - 공간 최적화를 통해 배열 대신 두 변수(prev1, prev2)를 사용하여 메모리 사용량을 줄입니다. + * @param {number}n step 수 + * @returns {number} 계단 도달 방법 수 + */ +function climbStairs(n: number): number { + if (n <=2) return n; + + let prev2 = 1; // dp[i-2] + let prev1 = 2; // dp[i-1] + + for (let i = 3; i <= n; i++) { + const cur = prev1 + prev2; // dp[i] 계산 + prev2 = prev1; // dp[i-2] 갱신 + prev1 = cur; // dp[i-1] 갱신 + } + + return prev1; // dp[n] 반환 +}; +