From cbfa24451bf9b2d0323fea5edb5b79c0c934a806 Mon Sep 17 00:00:00 2001 From: mangodm-web Date: Sun, 10 Nov 2024 00:26:39 +0900 Subject: [PATCH 1/2] feat: add house robber solution --- house-robber/mangodm-web.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 house-robber/mangodm-web.py diff --git a/house-robber/mangodm-web.py b/house-robber/mangodm-web.py new file mode 100644 index 000000000..3f208495e --- /dev/null +++ b/house-robber/mangodm-web.py @@ -0,0 +1,27 @@ +from typing import List + + +class Solution: + def rob(self, nums: List[int]) -> int: + """ + - Idea: i번째 집까지의 최대 금액은 두 가지 중 더 큰 값으로 결정된다. + 1. (i-2번째 집까지의 최대 금액) + i번째 집의 금액 + 2. (i-1번째 집까지의 최대 금액) + 이를 이용해 동적 프로그래밍으로 각 집까지의 최대 금액을 계산한다. + 중간 결과를 저장할 배열을 만들고 순차적으로 값을 채우면, 맨 마지막 값이 전체 최대 금액이 된다. + - Time Complexity: O(n). n은 집의 개수. + 모든 집을 한번씩 순회해야 하므로 O(n) 시간이 걸린다. + - Space Complexity: O(n). n은 집의 개수. + 각 집까지의 최대 금액을 저장하기 위해 배열을 사용하므로 O(n) 만큼의 메모리가 필요하다. + """ + if len(nums) == 1: + return nums[0] + + dp = [0] * len(nums) + dp[0] = nums[0] + dp[1] = max(nums[0], nums[1]) + + for i in range(2, len(nums)): + dp[i] = max(dp[i - 1], dp[i - 2] + nums[i]) + + return dp[-1] From bb9304078fa9173fca33349724877f03733e3a4b Mon Sep 17 00:00:00 2001 From: mangodm-web Date: Sun, 10 Nov 2024 00:26:54 +0900 Subject: [PATCH 2/2] feat: add meeting rooms solution --- meeting-rooms/mangodm-web.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 meeting-rooms/mangodm-web.py diff --git a/meeting-rooms/mangodm-web.py b/meeting-rooms/mangodm-web.py new file mode 100644 index 000000000..1aa320b6d --- /dev/null +++ b/meeting-rooms/mangodm-web.py @@ -0,0 +1,22 @@ +from typing import List + + +class Solution: + def canAttendMeetings(self, intervals: List[List[int]]) -> bool: + """ + - Idea: 모든 회의에 참석할 수 있으려면, 앞서 오는 회의가 끝나는 시간이 + 다음 회의의 시작 시간을 넘어서는 안된다. + 이를 확인하기 위해 주어진 회의 일정을 시작 시간 기준으로 정렬하고, + 순차적으로 비교하여 위의 조건을 위반하는 회의가 있는지 확인한다. + - Time Complexity: O(nlogn). n은 회의의 수. + 정렬에 O(nlogn)이 소요되고, 순차 탐색을 하는 데는 O(n)이 필요하다. + - Space Complexity: O(1). + 추가 공간은 사용하지 않는다. + """ + intervals.sort() + + for i in range(len(intervals) - 1): + if intervals[i][1] > intervals[i + 1][0]: + return False + + return True