From b56d702c61cd1f609eae6889bd72b7ee747ec0a1 Mon Sep 17 00:00:00 2001 From: jaejeong1 Date: Wed, 6 Nov 2024 22:22:29 +0900 Subject: [PATCH 1/5] Meeting room --- meeting-rooms/jaejeong1.java | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 meeting-rooms/jaejeong1.java diff --git a/meeting-rooms/jaejeong1.java b/meeting-rooms/jaejeong1.java new file mode 100644 index 000000000..5e4529d10 --- /dev/null +++ b/meeting-rooms/jaejeong1.java @@ -0,0 +1,29 @@ +import java.util.List; + +// Definition of Interval: +class Interval { + int start, end; + Interval(int start, int end) { + this.start = start; + this.end = end; + } +} + + +public class Solution { + /** + * @param intervals: an array of meeting time intervals + * @return: if a person could attend all meetings + */ + public boolean canAttendMeetings(List intervals) { + // Write your code here + var sortedIntervals = intervals.stream().sorted().toList(); + + for (int i=0; i sortedIntervals.get(i+1).start) { + return false; + } + } + return true; + } +} From 0e1484d605504141ab53fd673e4cb789aacdf8f5 Mon Sep 17 00:00:00 2001 From: jaejeong1 Date: Wed, 6 Nov 2024 23:01:34 +0900 Subject: [PATCH 2/5] Lowest Common Ancestor of a Binary Search Tree --- .../jaejeong1.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 lowest-common-ancestor-of-a-binary-search-tree/jaejeong1.java diff --git a/lowest-common-ancestor-of-a-binary-search-tree/jaejeong1.java b/lowest-common-ancestor-of-a-binary-search-tree/jaejeong1.java new file mode 100644 index 000000000..13f5bfffa --- /dev/null +++ b/lowest-common-ancestor-of-a-binary-search-tree/jaejeong1.java @@ -0,0 +1,33 @@ + +// Definition for a binary tree node. +class TreeNode { + int val; + TreeNode left; + TreeNode right; + + TreeNode(int x) { + val = x; + } +} + + +class Solution { + public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { + // 플이: p,q 둘다 root 보다 값이 적으면 왼쪽 서브트리를, 둘다 크면 오른쪽 서브트리를 탐색해야한다. + // 그렇지 않으면 해당 root가 최저 공통 조상이 된다. + // TC: O(H), H: 트리의 높이 + // SC: O(1) + var node = root; + while (node != null) { + if (p.val < node.val && q.val < node.val) { + node = node.left; + } else if (p.val > node.val && q.val > node.val) { + node = node.right; + } else { + break; + } + } + + return node; + } +} From b6fa871b8069b70663c47653863098d0068b1291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9E=A5=EC=9E=AC=EC=A0=95=20=5B=EC=BA=90=ED=85=8C?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=5D?= Date: Thu, 7 Nov 2024 21:10:30 +0900 Subject: [PATCH 3/5] house robber --- house-robber/jaejeong1.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 house-robber/jaejeong1.java diff --git a/house-robber/jaejeong1.java b/house-robber/jaejeong1.java new file mode 100644 index 000000000..4c3c26324 --- /dev/null +++ b/house-robber/jaejeong1.java @@ -0,0 +1,20 @@ +class Solution { + public int rob(int[] nums) { + // 인접한 경우는 제외한 최대 합 + // 풀이: dp로 풀이한다. dp[i] = max(dp[i-1], dp[i-2] + nums[i]) + // TC: O(N), SC: O(N) + if (nums.length == 1) { + return nums[0]; + } + + var dp = new int[nums.length]; + dp[0] = nums[0]; + dp[1] = Math.max(nums[0], nums[1]); + + for (int i=2; i Date: Thu, 7 Nov 2024 21:42:18 +0900 Subject: [PATCH 4/5] Non-overlapping Intervals --- non-overlapping-intervals/jaejeong1.java | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 non-overlapping-intervals/jaejeong1.java diff --git a/non-overlapping-intervals/jaejeong1.java b/non-overlapping-intervals/jaejeong1.java new file mode 100644 index 000000000..0fde91c1c --- /dev/null +++ b/non-overlapping-intervals/jaejeong1.java @@ -0,0 +1,27 @@ +import java.util.Arrays; +import java.util.Comparator; + +class Solution { + public int eraseOverlapIntervals(int[][] intervals) { + // 풀이: 정렬 후 각 구간의 끝 값을 저장해가며 양 옆을 비교, 제거 대상일때 카운트를 증가시켜 반환한다. + // TC: O(N) + // SC: O(1) + + // intervals를 각 구간의 끝 값을 기준으로 정렬 + Arrays.sort(intervals, Comparator.comparingInt(a -> a[1])); + + int answer = 0; + int end = intervals[0][1]; // 첫 번째 구간의 끝 값 + + // 두 번째 구간부터 순회하며 겹치는지 확인 + for (int i = 1; i < intervals.length; i++) { + if (intervals[i][0] < end) { // 현재 구간이 이전 구간과 겹치면 + answer++; // 제거 횟수를 증가 + } else { + end = intervals[i][1]; // 겹치지 않으면 현재 구간의 끝 값을 갱신 + } + } + + return answer; + } +} From 5e4edb43a8fc2b22e05b0e55558a9ab2f455a97b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9E=A5=EC=9E=AC=EC=A0=95=20=5B=EC=BA=90=ED=85=8C?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=5D?= Date: Thu, 7 Nov 2024 21:44:50 +0900 Subject: [PATCH 5/5] =?UTF-8?q?meeting=20rooms=20=EC=84=A4=EB=AA=85=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- meeting-rooms/jaejeong1.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/meeting-rooms/jaejeong1.java b/meeting-rooms/jaejeong1.java index 5e4529d10..515ad8dd7 100644 --- a/meeting-rooms/jaejeong1.java +++ b/meeting-rooms/jaejeong1.java @@ -16,7 +16,10 @@ public class Solution { * @return: if a person could attend all meetings */ public boolean canAttendMeetings(List intervals) { - // Write your code here + // 풀이: 정렬 후 양옆을 비교해가며 조건에 맞지 않으면 false 를 반환한다. + // TC: O(N) + // SC: O(1) + var sortedIntervals = intervals.stream().sorted().toList(); for (int i=0; i