diff --git a/merge-intervals/se6816.java b/merge-intervals/se6816.java new file mode 100644 index 0000000000..6515e8c1cd --- /dev/null +++ b/merge-intervals/se6816.java @@ -0,0 +1,26 @@ +/** + 탐욕법을 이용하여, 연산하는 방식 +*/ +class Solution { + public int[][] merge(int[][] intervals) { + + Arrays.sort(intervals, (a,b) -> a[0] - b[0]); + + List result = new ArrayList<>(); + int startNum = intervals[0][0]; + int endNum = intervals[0][1]; + for(int i = 1; i < intervals.length; i++) { + if(endNum >= intervals[i][0]) { + endNum = Math.max(endNum, intervals[i][1]); + continue; + } + + result.add(new int[]{startNum, endNum}); + startNum = intervals[i][0]; + endNum = intervals[i][1]; + } + result.add(new int[]{startNum, endNum}); + + return result.toArray(new int[result.size()][]); + } +} diff --git a/missing-number/se6816.java b/missing-number/se6816.java new file mode 100644 index 0000000000..ca6583c767 --- /dev/null +++ b/missing-number/se6816.java @@ -0,0 +1,27 @@ +/** + 최댓값을 기준으로 배열의 합과 1~N까지의 합을 비교하여 확인하는 방식 + */ +class Solution { + public int missingNumber(int[] nums) { + int max = 0; + int sum = 0; + boolean existsZero = false; + for(int i = 0; i < nums.length; i++) { + max = Math.max(nums[i], max); + sum += nums[i]; + if(nums[i] == 0){ + existsZero = true; + } + } + + int result = (max * (max + 1)) / 2 - sum; + + if(!existsZero) { + result = 0; + } else if(result == 0) { + result = max + 1; + } + + return result; + } +} diff --git a/reorder-list/se6816.java b/reorder-list/se6816.java new file mode 100644 index 0000000000..ab2145d0e3 --- /dev/null +++ b/reorder-list/se6816.java @@ -0,0 +1,25 @@ + +class Solution { + public void reorderList(ListNode head) { + if(head.next == null) return; + + ListNode prev = null; + while (true) { + ListNode tail = head; + while (tail.next != null) { + prev = tail; + tail = tail.next; + } + + if (prev == head) break; + + // tail 이동 + ListNode headNext = head.next; + prev.next = null; + head.next = tail; + tail.next = headNext; + + head = headNext; + } + } +}