File tree Expand file tree Collapse file tree 3 files changed +101
-0
lines changed Expand file tree Collapse file tree 3 files changed +101
-0
lines changed Original file line number Diff line number Diff line change 1+ #해석
2+ #list1 과 list2는 이미 오름차순 정렬된 리스트
3+ #두 리스트의 첫 노드값을 비교해 더 작은값을 첫번째 노드로 선택
4+ #이후 선택된 노드의 next포인터를 재귀적으로 처리하여 노드 병합
5+
6+
7+ #Big O
8+ #N: 매개변수 n의 크기(계단 갯수)
9+
10+ #Time Complexity: O(M + N)
11+ #- M: list1의 길이
12+ #- N: list2의 길이
13+ #- 각 재귀 호출에 하나의 노드가 다뤄진다, 따라서 최대 M+N 번의 재귀호출 발생
14+
15+
16+ #Space Complexity: O(M+N)
17+ #- 병합 리스트의 최대 길이 M+N이므로, 스택 공간 사용도 이에 비례한다.
18+
19+ class Solution (object ):
20+ def mergeTwoLists (self , list1 , list2 ):
21+ if list1 and list2 : ## 두 리스트가 모두 비어있지 않은 경우에만 해당
22+ if list1 .val > list2 .val : # list1의 현재 값이 list2보다 크다면
23+ list1 , list2 = list2 , list1 # 값을 교환하여 항상 list1이 더 작은 값을 가짐
24+ list1 .next = self .mergeTwoLists (list1 .next , list2 ) # list1의 다음 노드와 list2로 재귀 호출
25+ return list1 or list2 # 리스트가 하나라도 비어 있다면 비어 있지 않은 리스트를 반환
26+
27+
Original file line number Diff line number Diff line change 1+ #해석
2+ #nums가 0에서 len(nums) 까지의 숫자를 포함하나 확인하고, 없다면 해당 숫자를 return한다.
3+ #nums를 오름차순 정렬한다
4+ #nums가 조건을 만족하면, nums[i]는 인덱스 i와 동일해야한다. (e.g nums[0] =0, nums[1]=1)
5+ #배열의 마지막 요소(nums(len(num-1))) 이 len(nums)와 동일하지 않으면 nums은 0~len(nums) 까지의 숫자를 가진다는 조건을 만족 X -> 누락된 len(nums)를 return한다.
6+ #for loop 로 각 숫자가 인덱스와 일치 여부 확인
7+ #인덱스와 값이 일치하지 않는 nums[i]의 인덱스를 return한다.
8+
9+
10+ #Big O
11+ #N: 매개변수 n의 크기(계단 갯수)
12+
13+ #Time Complexity: O(nlog(n)) = O(nlog(n))+O(1)+O(n)
14+ #- n: nums배열의 길이
15+ #- sort(): Timsort방식이기에 O(nlog(n))
16+ #-if(nums[len(nums)-1] != len(nums)): 단일 조건 비교는 O(1)
17+ #for loop: nums의 길이에 비례하므로 O(n)
18+
19+
20+ #Space Complexity: O(1)
21+ #- sort(): nums.sort()는 제자리 정렬이기에 추가 공간 필요치 않으므로 O(1)
22+
23+ class Solution (object ):
24+ def missingNumber (self , nums ):
25+ """
26+ :type nums: List[int]
27+ :rtype: int
28+ """
29+ # Sort the list
30+ nums .sort ()
31+ # If the last element of nums doesn't align with the numbers of element in nums, return len(nums)
32+ # For example, nums[0,1] so range is [0:2] but there's no last element of 2 so return 2(len(nums))
33+ if (nums [len (nums )- 1 ] != len (nums )):
34+ return len (nums )
35+ #If each element doesn't match with the number of [0:len(nums)], return the i(index)
36+ for i in range (len (nums )):
37+ if nums [i ] != i :
38+ print (nums [i ],i )
39+ return i
40+
41+
42+
Original file line number Diff line number Diff line change 1+ #해석
2+ #문자열 s의 재배치로 문자열 t를 구성할 수 있으면 anagram으로 return true.
3+ #s와 t를 list로 바꾸고 sort하여 오름차순으로 정렬시킨다, 둘이 같으면 같은 문자를 가진 문자열 리스트이므로 return true
4+
5+ #Big O
6+ #N: 주어진 문자열 s와 t의 길이(N)
7+
8+ #Time Complexity: O(N)
9+ #- 문자열을 list로 변환하는 작업: O(N)
10+ #- 정렬작업 : NO(log N)
11+ #- 리스트 비교 작업, s와 t의 각 문자가 서로 일치하는지 체크한다 : O(N)
12+ #- 최종: O(N)
13+
14+ #Space Complexity: O(N)
15+ #- list s와 t는 주어진 문자열 s와 t에 기반하여 새로운 list 객체로 할당된다: O(N)
16+
17+ class Solution (object ):
18+ def isAnagram (self , s , t ):
19+ """
20+ :type s: str
21+ :type t: str
22+ :rtype: bool
23+ """
24+ s = list (s ) #Convert string to list
25+ t = list (t )
26+ s .sort () #Sort the list
27+ t .sort ()
28+
29+ return s == t #If the s and t are same, return true(anagram)
30+
31+
32+
You can’t perform that action at this time.
0 commit comments