From bbf7576e75dafbbb73832161ef6d811d22a65cc4 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Jan 2025 16:14:16 -0500 Subject: [PATCH 1/4] Solve: best-me-to-buy-and-sell-stock --- best-time-to-buy-and-sell-stock/Jay-Mo-99.py | 27 ++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 best-time-to-buy-and-sell-stock/Jay-Mo-99.py diff --git a/best-time-to-buy-and-sell-stock/Jay-Mo-99.py b/best-time-to-buy-and-sell-stock/Jay-Mo-99.py new file mode 100644 index 000000000..ae463b0da --- /dev/null +++ b/best-time-to-buy-and-sell-stock/Jay-Mo-99.py @@ -0,0 +1,27 @@ + #해석 + #prices list를 순회하면서 최솟값 min_val을 업데이트 한다 + #현재 prices[n]과 min_val의 차를 업데이트 해준다. + + + #Big O + #N: prices 의 크기 + + #Time Complexity: O(N) + #- for loop : prices의 원소 갯수만큼 순회하므로 O(N) + + + #Space Complexity: O(1) + #- min_val, answer : 변수는 상수이므로 O(1) +class Solution(object): + def maxProfit(self, prices): + + #Initialize variables + min_val = prices[0] + answer = 0 + + for n in range(len(prices)): + min_val= min(min_val,prices[n]) #Update min value of the prices list + answer = max(prices[n]-min_val,answer) #Update max value of prices[n] - min value + + return answer + From 516ce2c7f124d79a51355df9bce458e42e797741 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 7 Jan 2025 18:25:46 -0500 Subject: [PATCH 2/4] Solve: group-anagrams --- group-anagrams/Jay-Mo-99.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 group-anagrams/Jay-Mo-99.py diff --git a/group-anagrams/Jay-Mo-99.py b/group-anagrams/Jay-Mo-99.py new file mode 100644 index 000000000..370626d80 --- /dev/null +++ b/group-anagrams/Jay-Mo-99.py @@ -0,0 +1,37 @@ + #해석 + #tempDict = defaultdict(list) 로 자동으로 빈 리스트를 생성하는 딕셔너리 + #for loop 로 strs의 각 element를 순회 + #key=tuple(sorted(s)) 각 element인 s를 정렬하여 tuple로 변환하여 key로 저장한다 -> key는 변경 불가능 해야하므로 리스트 대신 tuple이 적합 + #tempDict[key].append(s) 로 key를 기준으로 element를 value값으로 tempDict에 저장한다. + #tempDict의 value값만 return하여 같은 key를 가지는 value가 list로 묶인 이중 list를 return한다. + + #Big O + #- N: strs 리스트의 element 갯수 + #- K: 각 element의 길이 + + #Time Complexity: O(N∗K∗Log(K)) = O(N) * O(K*Log(K)) + #- sorted(s) : sort,sorted알고리즘은 Timsort 알고리즘이므로 정렬 대상 길이(K)에 영향받음 -> O(K∗Log(K)) + #- for loop: strs의 element갯수만큼 순회 -> O(N) + + + + #Space Complexity: O(N∗K) = O(N) * O(N) + #- tempDict key : 각 키는 최대 K 크기의 tuple로 저장 -> O(K) + #- tempDict value: strs에 각 고유한 element만 있다면 tempDict의 value의 최댓값은 N개 -> O(N) + + +class Solution(object): + def groupAnagrams(self, strs): + """ + :type strs: List[str] + :rtype: List[List[str]] + """ + tempDict = defaultdict(list) + + for s in strs: + key = tuple(sorted(s)) + tempDict[key].append(s) + + return list(tempDict.values()) + + From f1e001b65c1a47d427ebbc75f90abb624830afff Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 8 Jan 2025 18:06:52 -0500 Subject: [PATCH 3/4] Solve: encode-and-decode-strings --- encode-and-decode-strings/Jay-Mo-99.py | 44 ++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 encode-and-decode-strings/Jay-Mo-99.py diff --git a/encode-and-decode-strings/Jay-Mo-99.py b/encode-and-decode-strings/Jay-Mo-99.py new file mode 100644 index 000000000..06ce41b06 --- /dev/null +++ b/encode-and-decode-strings/Jay-Mo-99.py @@ -0,0 +1,44 @@ + #해석 + #encode함수: 매개변수 strs 리스트를 join 메소드와 특정 매개변수를 사용해 하나의 string인 answer로 전환 + #decode함수: 매개변수 string s를 split 메소드를 사용해 특정 매개변수를 기점으로 나누어 list로 전환하여 return한다. + # 만약 strs가 비어있을때는 특정 string을 주입하여 decode 에서 해당 string을 인식하여 빈 배열([])를 return한다. + + + #Big O + #N: 리스트 strs의 길이 (element 갯수) + #L: strs의 각 element 평균 길이 (문자열의 길이) + #M: string s 의 길이 + + #Time Complexity: + #-encode: O(N*L) + #-- join(strs): 리스트에 있는 N개의 element와 각 문자열의 길이 L을 합산하여 문자열 생성 -> O(N * L) + #-decode: O(M): + #- split('구분자'): split 메서드는 구분자를 찾는 과정에서 string s를 순회하므로 -> O(M) + + + + #Space Complexity: O(1) + #-encode: O(N*L) + #-- answer: join 메서드로 생성되는 문자열은 strs 리스트의 모든 문자열을 합친 값이므로 -> O(N * L) + #-decode: O(M) + #-- answer:split 메서드로 생성되는 리스트는 string s의 길이에 비례하여 메모리를 차지 -> O(M) + + + +class Solution: + + + def encode(self, strs: List[str]) -> str: + answer = '!@#$%123456789'.join(strs) + if len(strs) == 0: + answer = "I am empty" + return answer + + def decode(self, s: str) -> List[str]: + answer = s.split('!@#$%123456789') + if s == "I am empty": + answer = [] + return answer + + + From 37eb1ad6a239ffb75bbcf48c45c57b48b6bafdbe Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 8 Jan 2025 18:22:41 -0500 Subject: [PATCH 4/4] Solve: encode-and-decode-strings --- encode-and-decode-strings/Jay-Mo-99.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/encode-and-decode-strings/Jay-Mo-99.py b/encode-and-decode-strings/Jay-Mo-99.py index 06ce41b06..4e4d287ef 100644 --- a/encode-and-decode-strings/Jay-Mo-99.py +++ b/encode-and-decode-strings/Jay-Mo-99.py @@ -17,7 +17,7 @@ - #Space Complexity: O(1) + #Space Complexity: #-encode: O(N*L) #-- answer: join 메서드로 생성되는 문자열은 strs 리스트의 모든 문자열을 합친 값이므로 -> O(N * L) #-decode: O(M)