diff --git a/find-median-from-data-stream/KwonNayeon.py b/find-median-from-data-stream/KwonNayeon.py new file mode 100644 index 000000000..bd2146bcb --- /dev/null +++ b/find-median-from-data-stream/KwonNayeon.py @@ -0,0 +1,43 @@ +""" +Constraints: +- -10^5 <= num <= 10^5 +- There will be at least one element in the data structure before calling findMedian. +- At most 5 * 10^4 calls will be made to addNum and findMedian. + +Time Complexity: +- addNum(): O(nlogn) + - 매번 정렬하기 때문 +- findMedian(): O(1) + - 정렬된 리스트에서 인덱스 접근 + +Space Complexity: O(n) +- 입력된 모든 숫자를 리스트에 저장 + +풀이방법: +1. 리스트 자료구조 사용 +2. 리스트에 각 요소들 추가 후 정렬 +3. 리스트의 요소 갯수가 홀수/짝수일 때의 경우를 나눠서 median 값을 구함 + +메모: +- heap이 익숙하지 않아서 일단 리스트로 문제를 풀었습니다. +- 나중에 heap으로 다시 풀기 +""" +class MedianFinder: + + def __init__(self): + self.nums = [] + + def addNum(self, num: int) -> None: + self.nums.append(num) + self.nums.sort() + + + def findMedian(self) -> float: + n = len(self.nums) + if n % 2 == 1: + return self.nums[n // 2] + else: + mid1 = self.nums[n // 2 - 1] + mid2 = self.nums[n // 2] + return (mid1 + mid2) / 2.0 + diff --git a/meeting-rooms/KwonNayeon.py b/meeting-rooms/KwonNayeon.py index 3df860ff5..af583106a 100644 --- a/meeting-rooms/KwonNayeon.py +++ b/meeting-rooms/KwonNayeon.py @@ -13,12 +13,19 @@ 풀이방법: 1. Base case: 빈 배열/none일 때 True 반환 -2. intervals를 시작점 기준으로 정렬 -3. prev_end 초기화 (첫 번째 미팅의 종료 시간) +2. 리스트(ntervals)를 시작점 기준으로 정렬 +3. prev_end(첫 번째 미팅의 종료 시간) 변수 초기화 4. 두 번째 미팅부터 순회하면서: - 만약 현재 시작점 (미팅 시작 시간)이 이전 미팅의 종료 시간보다 작으면 false 반환 - 그렇지 않으면 prev_end를 현재 미팅의 종료 시간으로 업데이트 5. 모든 미팅을 검사한 후에도 충돌이 없으면 true 반환 + +메모: +1. 변수명 헷갈림 +- intervals는 리스트 -> `.end` 속성 없음 +- interval은 객체 -> `.end` 속성 있음 +2. 정렬 문법 +- list.sort(key=lambda x: x.start) """ from typing import List