Skip to content

Commit

Permalink
Merge pull request #832 from Jay-Mo-99/main
Browse files Browse the repository at this point in the history
[Jay-Mo-99] Week 04
  • Loading branch information
SamTheKorean authored Jan 5, 2025
2 parents 9bd4f49 + 79e797c commit 3b55fd8
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 0 deletions.
27 changes: 27 additions & 0 deletions merge-two-sorted-lists/Jay-Mo-99.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
 #해석
#list1 과 list2는 이미 오름차순 정렬된 리스트
#두 리스트의 첫 노드값을 비교해 더 작은값을 첫번째 노드로 선택
#이후 선택된 노드의 next포인터를 재귀적으로 처리하여 노드 병합


#Big O
#N: 매개변수 n의 크기(계단 갯수)

#Time Complexity: O(M + N)
#- M: list1의 길이
#- N: list2의 길이
#- 각 재귀 호출에 하나의 노드가 다뤄진다, 따라서 최대 M+N 번의 재귀호출 발생


#Space Complexity: O(M+N)
#- 병합 리스트의 최대 길이 M+N이므로, 스택 공간 사용도 이에 비례한다.

class Solution(object):
def mergeTwoLists(self, list1, list2):
if list1 and list2: ## 두 리스트가 모두 비어있지 않은 경우에만 해당
if list1.val > list2.val: # list1의 현재 값이 list2보다 크다면
list1, list2 = list2, list1 # 값을 교환하여 항상 list1이 더 작은 값을 가짐
list1.next = self.mergeTwoLists(list1.next, list2) # list1의 다음 노드와 list2로 재귀 호출
return list1 or list2 # 리스트가 하나라도 비어 있다면 비어 있지 않은 리스트를 반환


42 changes: 42 additions & 0 deletions missing-number/Jay-Mo-99.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
 #해석
#nums가 0에서 len(nums) 까지의 숫자를 포함하나 확인하고, 없다면 해당 숫자를 return한다.
#nums를 오름차순 정렬한다
#nums가 조건을 만족하면, nums[i]는 인덱스 i와 동일해야한다. (e.g nums[0] =0, nums[1]=1)
#배열의 마지막 요소(nums(len(num-1))) 이 len(nums)와 동일하지 않으면 nums은 0~len(nums) 까지의 숫자를 가진다는 조건을 만족 X -> 누락된 len(nums)를 return한다.
#for loop 로 각 숫자가 인덱스와 일치 여부 확인
#인덱스와 값이 일치하지 않는 nums[i]의 인덱스를 return한다.


#Big O
#N: 매개변수 n의 크기(계단 갯수)

#Time Complexity: O(nlog(n)) = O(nlog(n))+O(1)+O(n)
#- n: nums배열의 길이
#- sort(): Timsort방식이기에 O(nlog(n))
#-if(nums[len(nums)-1] != len(nums)): 단일 조건 비교는 O(1)
#for loop: nums의 길이에 비례하므로 O(n)


#Space Complexity: O(1)
#- sort(): nums.sort()는 제자리 정렬이기에 추가 공간 필요치 않으므로 O(1)

class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
# Sort the list
nums.sort()
# If the last element of nums doesn't align with the numbers of element in nums, return len(nums)
# For example, nums[0,1] so range is [0:2] but there's no last element of 2 so return 2(len(nums))
if(nums[len(nums)-1] != len(nums)):
return len(nums)
#If each element doesn't match with the number of [0:len(nums)], return the i(index)
for i in range(len(nums)):
if nums[i] != i:
print(nums[i],i)
return i



32 changes: 32 additions & 0 deletions valid-anagram/Jay-Mo-99.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
 #해석
#문자열 s의 재배치로 문자열 t를 구성할 수 있으면 anagram으로 return true.
#s와 t를 list로 바꾸고 sort하여 오름차순으로 정렬시킨다, 둘이 같으면 같은 문자를 가진 문자열 리스트이므로 return true

#Big O
#N: 주어진 문자열 s와 t의 길이(N)

#Time Complexity: O(N)
#- 문자열을 list로 변환하는 작업: O(N)
#- 정렬작업 : NO(log N)
#- 리스트 비교 작업, s와 t의 각 문자가 서로 일치하는지 체크한다 : O(N)
#- 최종: O(N)

#Space Complexity: O(N)
#- list s와 t는 주어진 문자열 s와 t에 기반하여 새로운 list 객체로 할당된다: O(N)

class Solution(object):
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
s = list(s) #Convert string to list
t = list(t)
s.sort() #Sort the list
t.sort()

return s == t #If the s and t are same, return true(anagram)



0 comments on commit 3b55fd8

Please sign in to comment.