Skip to content

Commit 94908a3

Browse files
authored
Merge pull request #861 from Jay-Mo-99/main
[Jay-Mo-99] Week 5
2 parents 2c43c5b + 37eb1ad commit 94908a3

File tree

3 files changed

+108
-0
lines changed

3 files changed

+108
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
 #해석
2+
#prices list를 순회하면서 최솟값 min_val을 업데이트 한다
3+
#현재 prices[n]과 min_val의 차를 업데이트 해준다.
4+
5+
6+
#Big O
7+
#N: prices 의 크기
8+
9+
#Time Complexity: O(N)
10+
#- for loop : prices의 원소 갯수만큼 순회하므로 O(N)
11+
12+
13+
#Space Complexity: O(1)
14+
#- min_val, answer : 변수는 상수이므로 O(1)
15+
class Solution(object):
16+
def maxProfit(self, prices):
17+
18+
#Initialize variables
19+
min_val = prices[0]
20+
answer = 0
21+
22+
for n in range(len(prices)):
23+
min_val= min(min_val,prices[n]) #Update min value of the prices list
24+
answer = max(prices[n]-min_val,answer) #Update max value of prices[n] - min value
25+
26+
return answer
27+
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
 #해석
2+
#encode함수: 매개변수 strs 리스트를 join 메소드와 특정 매개변수를 사용해 하나의 string인 answer로 전환
3+
#decode함수: 매개변수 string s를 split 메소드를 사용해 특정 매개변수를 기점으로 나누어 list로 전환하여 return한다.
4+
# 만약 strs가 비어있을때는 특정 string을 주입하여 decode 에서 해당 string을 인식하여 빈 배열([])를 return한다.
5+
6+
7+
#Big O
8+
#N: 리스트 strs의 길이 (element 갯수)
9+
#L: strs의 각 element 평균 길이 (문자열의 길이)
10+
#M: string s 의 길이
11+
12+
#Time Complexity:
13+
#-encode: O(N*L)
14+
#-- join(strs): 리스트에 있는 N개의 element와 각 문자열의 길이 L을 합산하여 문자열 생성 -> O(N * L)
15+
#-decode: O(M):
16+
#- split('구분자'): split 메서드는 구분자를 찾는 과정에서 string s를 순회하므로 -> O(M)
17+
18+
19+
20+
#Space Complexity:
21+
#-encode: O(N*L)
22+
#-- answer: join 메서드로 생성되는 문자열은 strs 리스트의 모든 문자열을 합친 값이므로 -> O(N * L)
23+
#-decode: O(M)
24+
#-- answer:split 메서드로 생성되는 리스트는 string s의 길이에 비례하여 메모리를 차지 -> O(M)
25+
26+
27+
28+
class Solution:
29+
30+
31+
def encode(self, strs: List[str]) -> str:
32+
answer = '!@#$%123456789'.join(strs)
33+
if len(strs) == 0:
34+
answer = "I am empty"
35+
return answer
36+
37+
def decode(self, s: str) -> List[str]:
38+
answer = s.split('!@#$%123456789')
39+
if s == "I am empty":
40+
answer = []
41+
return answer
42+
43+
44+

group-anagrams/Jay-Mo-99.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
 #해석
2+
#tempDict = defaultdict(list) 로 자동으로 빈 리스트를 생성하는 딕셔너리
3+
#for loop 로 strs의 각 element를 순회
4+
#key=tuple(sorted(s)) 각 element인 s를 정렬하여 tuple로 변환하여 key로 저장한다 -> key는 변경 불가능 해야하므로 리스트 대신 tuple이 적합
5+
#tempDict[key].append(s) 로 key를 기준으로 element를 value값으로 tempDict에 저장한다.
6+
#tempDict의 value값만 return하여 같은 key를 가지는 value가 list로 묶인 이중 list를 return한다.
7+
8+
#Big O
9+
#- N: strs 리스트의 element 갯수
10+
#- K: 각 element의 길이
11+
12+
#Time Complexity: O(N∗K∗Log(K)) = O(N) * O(K*Log(K))
13+
#- sorted(s) : sort,sorted알고리즘은 Timsort 알고리즘이므로 정렬 대상 길이(K)에 영향받음 -> O(K∗Log(K))
14+
#- for loop: strs의 element갯수만큼 순회 -> O(N)
15+
16+
17+
18+
#Space Complexity: O(N∗K) = O(N) * O(N)
19+
#- tempDict key : 각 키는 최대 K 크기의 tuple로 저장 -> O(K)
20+
#- tempDict value: strs에 각 고유한 element만 있다면 tempDict의 value의 최댓값은 N개 -> O(N)
21+
22+
23+
class Solution(object):
24+
def groupAnagrams(self, strs):
25+
"""
26+
:type strs: List[str]
27+
:rtype: List[List[str]]
28+
"""
29+
tempDict = defaultdict(list)
30+
31+
for s in strs:
32+
key = tuple(sorted(s))
33+
tempDict[key].append(s)
34+
35+
return list(tempDict.values())
36+
37+

0 commit comments

Comments
 (0)