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 node.val && q.val > node.val) { + node = node.right; + } else { + break; + } + } + + return node; + } +} diff --git a/meeting-rooms/jaejeong1.java b/meeting-rooms/jaejeong1.java new file mode 100644 index 000000000..515ad8dd7 --- /dev/null +++ b/meeting-rooms/jaejeong1.java @@ -0,0 +1,32 @@ +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) { + // 풀이: 정렬 후 양옆을 비교해가며 조건에 맞지 않으면 false 를 반환한다. + // TC: O(N) + // SC: O(1) + + var sortedIntervals = intervals.stream().sorted().toList(); + + for (int i=0; i sortedIntervals.get(i+1).start) { + return false; + } + } + return true; + } +} 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; + } +}