From e9f8a75be620650f07e830b192103c5d9c4b4924 Mon Sep 17 00:00:00 2001 From: sejineer Date: Thu, 1 May 2025 04:27:28 +0900 Subject: [PATCH 1/5] best-time-to-buy-and-sell-stock solution --- best-time-to-buy-and-sell-stock/sejineer.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 best-time-to-buy-and-sell-stock/sejineer.py diff --git a/best-time-to-buy-and-sell-stock/sejineer.py b/best-time-to-buy-and-sell-stock/sejineer.py new file mode 100644 index 000000000..fd9907f4f --- /dev/null +++ b/best-time-to-buy-and-sell-stock/sejineer.py @@ -0,0 +1,15 @@ +""" +시간 복잡도: O(N) +공간 복잡도: O(1) +""" +class Solution: + def maxProfit(self, prices: List[int]) -> int: + buy = prices[0] + result = 0 + + for price in prices: + profit = price - buy + buy = min(buy, price) + result = max(profit, result) + + return result From bff5b2f010dc44a898b7962c4a3a1a4b20f76615 Mon Sep 17 00:00:00 2001 From: sejineer Date: Thu, 1 May 2025 10:29:11 +0900 Subject: [PATCH 2/5] group-anagrams solution --- group-anagrams/sejineer.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 group-anagrams/sejineer.py diff --git a/group-anagrams/sejineer.py b/group-anagrams/sejineer.py new file mode 100644 index 000000000..426282568 --- /dev/null +++ b/group-anagrams/sejineer.py @@ -0,0 +1,14 @@ +""" +시간 복잡도: O(N * K) N=문자열 개수, 평균 문자열 길이 = K (최대 100) +공간 복잡도: O(N * K) +""" +from collections import Counter, defaultdict + +class Solution: + def groupAnagrams(self, strs: List[str]) -> List[List[str]]: + strs_dict = defaultdict(list) + for s in strs: + s_counter = Counter(s) + strs_dict[frozenset(s_counter.items())].append(s) + + return list(strs_dict.values()) From 280072846ad8f81e29a2af03ce49a3d1d91c7dd7 Mon Sep 17 00:00:00 2001 From: sejineer Date: Thu, 1 May 2025 18:37:54 +0900 Subject: [PATCH 3/5] word-break solution --- word-break/sejineer.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 word-break/sejineer.py diff --git a/word-break/sejineer.py b/word-break/sejineer.py new file mode 100644 index 000000000..9029ba50e --- /dev/null +++ b/word-break/sejineer.py @@ -0,0 +1,14 @@ +class Solution: + def wordBreak(self, s: str, wordDict: List[str]) -> bool: + + @cache + def dfs(k: int) -> bool: + if k == len(s): + return True + for word in wordDict: + if s[k : k + len(word)] == word: + if dfs(k + len(word)): + return True + return False + + return dfs(0) From 62bf33503656c8e8c8552ab34c584f2d2cc379ec Mon Sep 17 00:00:00 2001 From: sejineer Date: Thu, 1 May 2025 18:54:39 +0900 Subject: [PATCH 4/5] word-break add comment --- word-break/sejineer.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/word-break/sejineer.py b/word-break/sejineer.py index 9029ba50e..380a8a76a 100644 --- a/word-break/sejineer.py +++ b/word-break/sejineer.py @@ -1,3 +1,7 @@ +""" +시간 복잡도: O(n * D * L) n = 문자열 길이, D = 사전 크기, L = 단어 평균 길이 +공간 복잡도: O(n) +""" class Solution: def wordBreak(self, s: str, wordDict: List[str]) -> bool: From c51b8bdce18a5f59ed00ce01003ca1c206895023 Mon Sep 17 00:00:00 2001 From: sejineer Date: Fri, 2 May 2025 01:06:44 +0900 Subject: [PATCH 5/5] implement-trie-prefix-tree solution --- implement-trie-prefix-tree/sejineer.py | 29 ++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 implement-trie-prefix-tree/sejineer.py diff --git a/implement-trie-prefix-tree/sejineer.py b/implement-trie-prefix-tree/sejineer.py new file mode 100644 index 000000000..d4de97b75 --- /dev/null +++ b/implement-trie-prefix-tree/sejineer.py @@ -0,0 +1,29 @@ +class Trie: + + def __init__(self): + self.root = {"$": True} + + def insert(self, word: str) -> None: + node = self.root + for ch in word: + if ch not in node: + node[ch] = {"$": False} + node = node[ch] + node["$"] = True + + + def search(self, word: str) -> bool: + node = self.root + for ch in word: + if ch not in node: + return False + node = node[ch] + return node["$"] + + def startsWith(self, prefix: str) -> bool: + node = self.root + for ch in prefix: + if ch not in node: + return False + node = node[ch] + return True